我正在审查顾问编写的一些代码,虽然已经出现了数十个危险信号,但我无法理解以下代码段:
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# 语言中的一些特殊情况,它被编译成我不知道的东西,还是程序员只是采用了一些前一段时间碰巧工作的货物崇拜?