Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MethodInvoker与新MethodInvoker_C#_Multithreading_Asynchronous_Delegates - Fatal编程技术网

C# MethodInvoker与新MethodInvoker

C# MethodInvoker与新MethodInvoker,c#,multithreading,asynchronous,delegates,C#,Multithreading,Asynchronous,Delegates,我正在维护voip多线程windows窗体应用程序,我可以理解,当我们不想定义委托,但想使用委托将数据从工作线程路由到gui线程时,会使用MethodInvoker,所以这段代码很有意义 void Synch_ProgressComplete(bool Success) { _SynchPseudoGauge = 100; if (this.InvokeRequired) this.Invoke((MethodInvoker)

我正在维护voip多线程windows窗体应用程序,我可以理解,当我们不想定义委托,但想使用委托将数据从工作线程路由到gui线程时,会使用MethodInvoker,所以这段代码很有意义

 void Synch_ProgressComplete(bool Success)
    {
        _SynchPseudoGauge = 100;

        if (this.InvokeRequired)
            this.Invoke((MethodInvoker)
                (() => { SynchProgressBar.Value = _SynchPseudoGauge; }));
        else
            SynchProgressBar.Value = _SynchPseudoGauge;

        _LastSynchAvailability = _Synch.Available;

        if (this.InvokeRequired)
            this.Invoke((MethodInvoker)
                (() => { WebserviceAvailibilityLabel.ForeColor = Success ? Color.Black : Color.Red; }));
        else
            WebserviceAvailibilityLabel.ForeColor = Success ? Color.Black : Color.Red;


        if (this.InvokeRequired)
            this.Invoke((MethodInvoker)
                (() => { WebserviceAvailibilityLabel.Text = Success ? "Webservice Available" : "Webservice Error"; }));
        else
            WebserviceAvailibilityLabel.Text = Success ? "Webservice Available" : "Webservice Error";
但我不明白这一点

  SynchroniseDelegate SynchDelegate = new SynchroniseDelegate(_Synch.Synchronise);
                AsyncCallback SynchCallback = new AsyncCallback(Synch_Callback);
AsyncCallback SynchCallback = new AsyncCallback(Synch_Callback);
   SynchDelegate.BeginInvoke(Synchronisation.ForceSync.All, SynchCallback, new object() { });

private void Synch_Callback(IAsyncResult ar)
        {
            this.Invoke(new MethodInvoker(InitialiseTelephony), new object() { });
        }

在上面的代码片段中,有人能帮忙吗?作者想创建一个给定lambda表达式的委托。Lambda表达式没有CLR类型(它们没有委托类型)。不过,它们可以转换为代表


在一种情况下,lambda被转换为委托类型。在另一种情况下,构造函数语法用于执行转换。这两种变体的作用相同。您可以做任何您喜欢的事情。

在上面的代码片段中,作者希望创建一个给定lambda表达式的委托。Lambda表达式没有CLR类型(它们没有委托类型)。不过,它们可以转换为代表


在一种情况下,lambda被转换为委托类型。在另一种情况下,构造函数语法用于执行转换。这两种变体的作用相同。您可以随心所欲。

如第一个示例中所做的那样,将方法强制转换为委托类型在功能上与第二个示例中使用的类似构造函数的语法相同

将方法强制转换为委托类型(如第一个示例中所做)在功能上与第二个示例中使用的类似构造函数的语法相同

你不明白吗?你不明白的是什么?您确实理解的代码段与您不理解的代码段似乎没有什么不同。为什么new运算符与MethodInvoker一起使用,而在上面的代码中MethodInvoker不使用new运算符operator@Servy为什么新运算符与MethodInvoker一起使用,而在上面的代码中,MethodInvoker在没有新运算符的情况下使用Control.BeginInvoke()和代表的开始行()方法是完全不相关的,并且做着非常不同的事情。一些背景知识。你不了解它吗?你不了解的是什么?你了解的代码片段似乎与你不了解的代码片段没有什么不同。为什么新操作符与MethodInvoker一起使用,而在上面的代码中MethodInvoker是u没有新的operator@Servy为什么新运算符与MethodInvoker一起使用,而在上面的代码中MethodInvoker在没有新运算符的情况下使用控件。BeginInvoke()和委托的BeginInvoke()方法完全不相关,并且执行非常不同的操作。中的一些背景信息。