最佳答案
我正在审阅一位顾问编写的一些代码,尽管已经出现了几十个危险信号,但我还是无法理解下面这段代码:
private void foo()
{
if (InvokeRequired)
{
lock (new object())
{
if (m_bar!= null)
Invoke(new fooDelegate(foo), new object[] { });
}
}
else
{
if(OnBazChanged != null)
OnBazChanged();
}
}
Lock (new object ())在这里做什么?应该没有任何效果,因为它总是锁定另一个对象,但是这种锁定在整个代码中都是持久的,即使在非复制和粘贴的部分中也是如此。这是 C # 语言中的某种特殊情况,它被编译成我不知道的东西,还是程序员只是采用了一些前一段时间偶然发生的货物崇拜?