请参阅MSDN处的线程安全呼叫教程,查看以下语句:
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired) {
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
} else {
this.textBox1.Text = text;
}
当然,我已经在我的代码中多次使用它了,并且理解为什么要使用它。 但是我仍然对这些陈述有一些不明确的问题,所以请任何人帮我找到它们。
问题是:
谢谢!
答案 0 :(得分:2)
你当然可以使用Invoker来打电话,但是:
如果您确定自己总是在GUI线程上,则可以忽略上述检查并直接致电。
答案 1 :(得分:1)
if
语句的第一部分,它总是没问题,因为Invoke
已经检查你是否在UI线程上。
Invoke
必须做很多工作来运行你的方法,即使你已经在正确的线程上。这是它必须做的事情(从Control.cs的源代码中提取):
在UI线程直接调用期间,第二个分支中的所有步骤都不需要,因为所有前提条件都已经得到保证,所以它肯定会更快,尽管公平,除非你非常更新控件经常,你不太可能注意到任何差异。