在我的應用程序中,我有一個表單啓動同步過程,並且出於許多原因,我希望一次只允許一次同步運行。所以我在表單中添加了一個靜態bool字段,指示同步是否正在進行,並添加了一個鎖,將該字段設置爲true,如果它尚未設置,以便第一個線程可以開始同步,但是當它運行每個其他線程將嘗試啓動它將終止。C#鎖定和代碼分析警告CA2002
我的代碼是這樣的:
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:微軟。可靠性:'SynchronizationForm.SynchronizationForm_Shown(object,EventArgs)'鎖定類型'Type'的引用。將其替換爲具有強身份的對象的鎖。
任何人都可以向我解釋我的代碼有什麼問題,我該如何改進它以使警告消失。這個對象具有強烈的身份是什麼意思?
這是事實,但鎖定具有「弱身份」的對象也不適用於其他原因。 – 2009-10-23 13:56:49