MethodInvoker vs new MethodInvoker

本文关键字:MethodInvoker new vs | 更新日期: 2023-09-27 18:29:45

我正在维护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被转换为委托类型。在另一种情况下,构造函数语法用于执行转换。这两种变体的作用相同。你可以做任何你喜欢的事。

MethodInvoker vs new MethodInvoker

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