【发布时间】:2009-10-23 13:49:49
【问题描述】:
在我的应用程序中,我有一个启动同步过程的表单,出于多种原因,我希望一次只运行一个同步。因此,我在表单中添加了一个静态 bool 字段,指示同步是否正在进行中,并添加了一个锁以将此字段设置为 true(如果尚未设置),以便第一个线程可以开始同步,但是当它运行所有其他线程时将尝试启动它会终止。
我的代码是这样的:
internal partial class SynchronizationForm : Form
{
private static volatile bool workInProgress;
private void SynchronizationForm_Shown(object sender, EventArgs e)
{
lock (typeof(SynchronizationForm))
{
if (!workInProgress)
{
workInProgress = true;
}
else
{
this.Close();
}
}
}
}
这运行良好,但是当我对我的项目运行代码分析时,我收到以下警告消息:
CA2002 : Microsoft.Reliability : 'SynchronizationForm.SynchronizationForm_Shown(object, EventArgs)' 锁定类型为 'Type' 的引用。将其替换为针对具有强标识的对象的锁。
谁能向我解释我的代码有什么问题以及如何改进它以使警告消失。对象具有强标识是什么意思?
【问题讨论】:
标签: c# locking code-analysis