我有以下代码,我基于Monitor class example on the msdn website。
private void WebRefresh_Click(object sender, EventArgs e)
{
if (WebRefresh.Enabled)//Only call from button
{
if (System.Threading.Monitor.TryEnter(deployIsRunning))
{
refreshWebVersion();
System.Threading.Monitor.Exit(deployIsRunning);
}
}
else
{
MessageBox.Show("You cannot refresh during a deploy");
}
}
代码在Monitor.Exit()调用上抛出SynchronizationLockException,并显示错误消息:“对象同步方法是从未同步的代码块调用的。”该错误的解释是我尝试发布一个我不拥有的互斥锁,但是我无法输入调用Exit
的代码块,除非TryEnter
成功。如何删除此错误?
答案 0 :(得分:8)
我的猜测是deployIsRunning
是bool
类型的变量或其他一些值类型。您拨打TryEnter
和Exit
的电话会设置该值,每次都会创建一个新对象。
基本上,只能使用引用类型变量来锁定。