c#使用这个是安全的吗?Invoke?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#使用这个是安全的吗?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” 第二次尝试访问主线程UI控件简单

使用2nd尝试“this.Invoke”有什么问题吗? 我想知道第二次尝试是否安全 第二次尝试是否有可能导致任何问题?

答案

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

实际上,您几乎肯定知道您的代码是否在不同的线程中创建不同的控件(因为这是一件非常不寻常的事情)。如果你不知道自己在做什么,那就假设你不是,你的第二个表格应该没问题。

以上是关于c#使用这个是安全的吗?Invoke?的主要内容,如果未能解决你的问题,请参考以下文章

Parallel.Invoke 和 Parallel.ForEach 本质上是一样的吗?

(转)c#多线程 Invoke方法的使用

+= 运算符在 Python 中是线程安全的吗?

java.lang.NullPointerException: Attempt to invoke virtual method ‘int android.database.sqlite异常(代码片段

与普通的 p/Invoke 调用相比,使用不安全的 P/Invoke 调用是不是有性能优势?

C# invoke使用