C# 是否需要使用此。调用
我遇到了一段第三方代码,它使用invoke来更新控件,但是invoke在lock语句中,例如C# 是否需要使用此。调用,c#,winforms,invoke,C#,Winforms,Invoke,我遇到了一段第三方代码,它使用invoke来更新控件,但是invoke在lock语句中,例如 lock (mi) { this.Invoke(mi); } 其中mi是System.Windows.Forms.MethodInvoker mi 调用的方法只是更新一个windows控件(一个列表框),并在创建usercontrol时进行初始化,并且从未更改 所以有两个问题 需要锁吗 它可能会引起问题吗 在控件.Invoke周围使用锁是自找麻烦。您基本上是说,“我会等到另一个线程处理完
lock (mi)
{
this.Invoke(mi);
}
其中mi是System.Windows.Forms.MethodInvoker mi
调用的方法只是更新一个windows控件(一个列表框),并在创建usercontrol时进行初始化,并且从未更改
所以有两个问题
在
控件.Invoke周围使用锁是自找麻烦。您基本上是说,“我会等到另一个线程处理完我的委托”——但是如果该线程(UI线程)尝试获取相同的锁,它将无法获取,因为工作线程已经拥有它。砰的一声,瞬间死锁
使用BeginInvoke
不会有问题,但仍然不是一个好主意。基本上,这看起来像是某个人的代码,他的想法是使代码线程安全,即在左、右和中央打锁
现在,由于代码锁定了委托引用,很难说其他任何东西是否会尝试获取相同的锁。。。但如果没有,锁就毫无意义了。谢谢。我希望这就是答案,否则我将不得不重温我曾经写过的所有调用。