C#:this.Invoke((MethodInvoker)委托
C# : this.Invoke((MethodInvoker)delegate
有人可以向我解释以下代码吗:
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)delegate"。
提前谢谢你。
彼得。
奇怪,没人回答这个问题。
让我们把它分成几部分:
this.Invoke:这是一种同步机制,包含在所有控件中。所有 graphic/GUI 更新只能从 GUI 线程执行。 (这很可能是主线程。)因此,如果您有其他线程(例如工作线程、异步函数等)会导致 GUI 更新,则需要使用 Invoke。否则程序会崩溃
delegate{ ... }:这是一个匿名函数。您可以将其视为 "creating a function on the fly"。 (不是在代码中找到 space,而是创建函数名称、参数等)
(MethodInvoker):MethodInvoker 只是 Invoke 期望的委托名称。例如。 Invoke 期望被赋予一个函数,与 "MethodInvoker" 函数具有相同的签名。
发生了什么,Invoke 被赋予了一个函数指针。它通过互斥锁唤醒 GUI 线程并告诉它执行函数(通过函数指针)。然后父线程等待 GUI 线程完成执行。它完成了。
有人可以向我解释以下代码吗:
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)delegate"。
提前谢谢你。
彼得。
奇怪,没人回答这个问题。
让我们把它分成几部分:
this.Invoke:这是一种同步机制,包含在所有控件中。所有 graphic/GUI 更新只能从 GUI 线程执行。 (这很可能是主线程。)因此,如果您有其他线程(例如工作线程、异步函数等)会导致 GUI 更新,则需要使用 Invoke。否则程序会崩溃
delegate{ ... }:这是一个匿名函数。您可以将其视为 "creating a function on the fly"。 (不是在代码中找到 space,而是创建函数名称、参数等)
(MethodInvoker):MethodInvoker 只是 Invoke 期望的委托名称。例如。 Invoke 期望被赋予一个函数,与 "MethodInvoker" 函数具有相同的签名。
发生了什么,Invoke 被赋予了一个函数指针。它通过互斥锁唤醒 GUI 线程并告诉它执行函数(通过函数指针)。然后父线程等待 GUI 线程完成执行。它完成了。