c#使用this.invoke是否安全?

时间:2018-09-17 12:02:19

标签: c# delegates thread-safety invoke

如果要从另一个线程更新主线程中主UI控件的值,请使用以下代码

第一次尝试-有效

Label1.Invoke((MethodInvoker)(()=> Label1.Text = "label"));  
button1.Invoke((MethodInvoker)(()=> button1.Text = "button")); 
textBox1.Invoke((MethodInvoker)(()=> textBox1.Text = "textBox"));  

第二次尝试-有效

this.Invoke((MethodInvoker)(()=> 
{
    Label1.Text = "label";  
    button1.Text = "button";
    textBox1.Text = "textBox";
}));  

第二次尝试看起来很简单,因为只需要编写“ this.Invoke”
  第二个Try访问简单地访问主线程UI控件

使用第二次尝试“ this.invoke”是否有问题?
  我不知道第二次尝试是否安全
  第二次尝试是否有可能引起任何问题?

1 个答案:

答案 0 :(得分:5)

第二种方法是安全的,只要所有控件都与同一UI线程相关联即可。 几乎总是情况,但并非绝对具有情况。

实际上,您几乎可以确定您的代码 是否在不同的线程中创建不同的控件(因为这是非常不寻常的事情)。如果您不知道自己在做什么,请暂时假设自己不在,并且第二种形式应该没问题。