请有人解释下面的代码:
this.Invoke((MethodInvoker)delegate
{
lblNCK.Text = cncType;
});
以下是它的来源:
string cncType;
if (objDMainCncData != null)
{
int rc = objDMainCncData.Init(objDGroupManager.Handle);
if (rc == 0)
{
cncType = objDMainCncData.GetCncIdentifier();
if (cncType != string.Empty)
{
if (cncType.ToUpper().IndexOf("+") != -1)
_bFXplus = true;
this.Invoke((MethodInvoker)delegate
{
lblNCK.Text = cncType;
});
}
}
else
{
DisplayMessage("objDMainCncData.Init() failed ! error : " + rc.ToString());
}
}
}
我没有使用" this.Invoke((MethodInvoker)委托"。
提前谢谢你。
彼得。
答案 0 :(得分:11)
奇怪,没有人回答这个问题。
让我们把它分成几部分:
this.Invoke :这是一种同步机制,包含在所有控件中。所有图形/ GUI更新必须仅从GUI线程执行。 (这很可能是主线程。)因此,如果您有其他线程(例如工作线程,异步函数等)将导致GUI更新,则需要使用Invoke。否则程序会爆炸。
委托{...} :这是一个匿名函数。您可以将其视为“即时创建功能”。 (而不是在代码中找到空格,创建函数名,参数等。)
(MethodInvoker):MethodInvoker只是Invoke所期望的委托的名称。例如。 Invoke期望获得一个函数,其签名与“MethodInvoker”函数相同。
会发生什么,是Invoke被赋予一个函数指针。它通过互斥锁唤醒GUI线程并告诉它执行该函数(通过函数指针)。然后父线程等待GUI线程完成执行。它已经完成了。