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被转换为委托类型。在另一种情况下,构造函数语法用于执行转换。这两种变体的作用相同。你可以做任何你喜欢的事。
将方法强制转换为委托类型,就像第一个示例中所做的那样,在功能上与第二个示例中使用的类似构造函数的语法相同。