gpt4 book ai didi

c# - 是否需要锁定。调用

转载 作者:行者123 更新时间:2023-12-02 07:36:51 24 4
gpt4 key购买 nike

我遇到了一段第三方代码,它使用调用来更新控件,但调用位于锁定语句内,例如

 lock (mi) 
{
this.Invoke(mi);
}

其中 mi 是 System.Windows.Forms.MethodInvoker mi。

所调用的方法只是更新一个窗口控件(列表框),并在创建用户控件时初始化,并且从未更改。

有两个问题

  1. 是否需要锁?
  2. 这可能会导致问题吗?

最佳答案

Control.Invoke 周围使用锁是自找麻烦。你基本上是在说,“我会等到另一个线程处理完我的委托(delegate)” - 但是如果那个线程(UI线程)尝试获取相同的锁,它将无法因为工作线程已经拥有它了。砰 - 瞬间陷入僵局。

使用BeginInvoke这不会是一个问题,但它仍然不是一个好主意。基本上,这看起来像是某人的代码,他的想法是使代码线程安全,即向左、右和中心加锁。

现在,由于代码锁定了委托(delegate)引用,很难说是否还有其他东西尝试获取相同的锁...但如果没有,那么该锁就毫无意义首先。

关于c# - 是否需要锁定。调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5081140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com