<tfoot id='iu17C'></tfoot>
      <legend id='iu17C'><style id='iu17C'><dir id='iu17C'><q id='iu17C'></q></dir></style></legend>

    1. <i id='iu17C'><tr id='iu17C'><dt id='iu17C'><q id='iu17C'><span id='iu17C'><b id='iu17C'><form id='iu17C'><ins id='iu17C'></ins><ul id='iu17C'></ul><sub id='iu17C'></sub></form><legend id='iu17C'></legend><bdo id='iu17C'><pre id='iu17C'><center id='iu17C'></center></pre></bdo></b><th id='iu17C'></th></span></q></dt></tr></i><div id='iu17C'><tfoot id='iu17C'></tfoot><dl id='iu17C'><fieldset id='iu17C'></fieldset></dl></div>
    2. <small id='iu17C'></small><noframes id='iu17C'>

        <bdo id='iu17C'></bdo><ul id='iu17C'></ul>

        匿名方法作为 BeginInvoke 的参数?

        Anonymous method as parameter to BeginInvoke?(匿名方法作为 BeginInvoke 的参数?)
        <legend id='BtrdI'><style id='BtrdI'><dir id='BtrdI'><q id='BtrdI'></q></dir></style></legend>
          <i id='BtrdI'><tr id='BtrdI'><dt id='BtrdI'><q id='BtrdI'><span id='BtrdI'><b id='BtrdI'><form id='BtrdI'><ins id='BtrdI'></ins><ul id='BtrdI'></ul><sub id='BtrdI'></sub></form><legend id='BtrdI'></legend><bdo id='BtrdI'><pre id='BtrdI'><center id='BtrdI'></center></pre></bdo></b><th id='BtrdI'></th></span></q></dt></tr></i><div id='BtrdI'><tfoot id='BtrdI'></tfoot><dl id='BtrdI'><fieldset id='BtrdI'></fieldset></dl></div>

            <tbody id='BtrdI'></tbody>

          <tfoot id='BtrdI'></tfoot>
            <bdo id='BtrdI'></bdo><ul id='BtrdI'></ul>

                  <small id='BtrdI'></small><noframes id='BtrdI'>

                  本文介绍了匿名方法作为 BeginInvoke 的参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  为什么不能将匿名方法作为参数传递给 BeginInvoke 方法?我有以下代码:

                  Why can't you pass an anonymous method as a parameter to the BeginInvoke method? I have the following code:

                  private delegate void CfgMnMnuDlg(DIServer svr);
                  private void ConfigureMainMenu(DIServer server,)
                  {
                      MenuStrip mnMnu = PresenterView.MainMenu;
                      if (mnMnu.InvokeRequired)
                      {
                          mnMnu.BeginInvoke((CfgMnMnuDlg)ConfigureMainMenu, 
                                              new object[] { server});
                      }
                      else
                      {
                          // Do actual work here
                      }
                  }
                  

                  我试图避免声明委托.为什么我不能写类似下面的东西呢?或者我可以,我只是想不出正确的语法?以下当前生成:

                  I'm trying to avoid declaring the delegate. Why can't I write something like the below instead? Or can I, and I just can't figure out the correct syntax? The below currently generates an:

                  参数类型匿名方法"不可分配给参数类型System.Delegate"

                  Argument type 'Anonymous method' is not assignable to parameter type 'System.Delegate'

                  好的,这当然是对的,但是我可以使用其他语法来执行此操作(避免为了使用 BeginInvoke() 而声明单独的委托吗?

                  Ok, that's right of course, but is there some other syntax I can use to do this (avoid having to declare a separate delegate in order to use BeginInvoke()?

                  (能够做到这一点将完全符合使用匿名方法/lamdas 代替显式委托的概念,这在其他任何地方都非常干净.)

                  (Being able to do this would fit in neatly with the concept of using anon methods/lamdas in place of explicit delegates which works so cleanly everywhere else.)

                  private void ConfigureMainMenu(DIServer server,)
                  {
                      MenuStrip mnMnu = PresenterView.MainMenu;
                      if (mnMnu.InvokeRequired)
                      {
                          mnMnu.BeginInvoke(  //  pass anonymous method instead ?
                               delegate(DIServer svr) { ConfigureMainMenu(server);},     
                               new object[] { server});
                      }
                      else
                      {
                          // Do actual work here
                      }
                  }
                  

                  推荐答案

                  试试这个:

                  control.BeginInvoke((MethodInvoker) delegate { /* method details */ });
                  

                  或者:

                  private void ConfigureMainMenu(DIServer server)
                  {
                      if (control.InvokeRequired)
                      {
                          control.BeginInvoke(new Action<DIServer >(ConfigureMainMenu), server);
                      }
                      else
                      {
                          /* do work */
                      }
                  }
                  

                  或者:

                  private void ConfigureMainMenu(DIServer server)
                  {
                      MenuStrip mnMnu = PresenterView.MainMenu;
                      if (mnMnu.InvokeRequired)
                      {
                          // Private variable
                          _methodInvoker = new MethodInvoker((Action)(() => ConfigureMainMenu(server)));
                          _methodInvoker.BeginInvoke(new AsyncCallback(ProcessEnded), null); // Call _methodInvoker.EndInvoke in ProcessEnded
                      }
                      else
                      {
                          /* do work */
                      }
                  }
                  

                  这篇关于匿名方法作为 BeginInvoke 的参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Multicast delegate weird behavior in C#?(C# 中的多播委托奇怪行为?)
                  Parameter count mismatch with Invoke?(参数计数与调用不匹配?)
                  How to store delegates in a List(如何将代表存储在列表中)
                  How delegates work (in the background)?(代表如何工作(在后台)?)
                  C# Asynchronous call without EndInvoke?(没有 EndInvoke 的 C# 异步调用?)
                  Delegate.CreateDelegate() and generics: Error binding to target method(Delegate.CreateDelegate() 和泛型:错误绑定到目标方法)
                1. <i id='BbEEi'><tr id='BbEEi'><dt id='BbEEi'><q id='BbEEi'><span id='BbEEi'><b id='BbEEi'><form id='BbEEi'><ins id='BbEEi'></ins><ul id='BbEEi'></ul><sub id='BbEEi'></sub></form><legend id='BbEEi'></legend><bdo id='BbEEi'><pre id='BbEEi'><center id='BbEEi'></center></pre></bdo></b><th id='BbEEi'></th></span></q></dt></tr></i><div id='BbEEi'><tfoot id='BbEEi'></tfoot><dl id='BbEEi'><fieldset id='BbEEi'></fieldset></dl></div>
                  <legend id='BbEEi'><style id='BbEEi'><dir id='BbEEi'><q id='BbEEi'></q></dir></style></legend>

                    <bdo id='BbEEi'></bdo><ul id='BbEEi'></ul>
                    <tfoot id='BbEEi'></tfoot>

                        1. <small id='BbEEi'></small><noframes id='BbEEi'>

                              <tbody id='BbEEi'></tbody>