Trong ứng dụng của tôi, tôi có một biểu mẫu bắt đầu quá trình đồng bộ hóa và vì một số lý do tôi muốn chỉ cho phép một đồng bộ hóa chạy cùng một lúc. Vì vậy, tôi đã thêm một trường bool tĩnh vào biểu mẫu của tôi cho biết liệu đồng bộ đang được tiến hành hay chưa và thêm khóa để đặt trường này thành true nếu nó chưa được đặt sao cho luồng đầu tiên có thể bắt đầu đồng bộ hóa. sẽ cố gắng bắt đầu nó sẽ chấm dứt.Cảnh báo phân tích khóa và mã C# CA2002
Mã của tôi là một cái gì đó như thế này:
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();
}
}
}
}
này đang làm việc tốt nhưng khi tôi chạy Mã Phân tích về dự án của tôi Tôi nhận được thông báo cảnh báo sau đây:
CA2002: Microsoft. Độ tin cậy: 'SynchronizationForm.SynchronizationForm_Shown (đối tượng, EventArgs)' khóa trên một tham chiếu của loại 'Type'. Thay thế này bằng một khóa chống lại một đối tượng có bản sắc mạnh.
Bất cứ ai có thể giải thích cho tôi điều gì sai với mã của tôi và cách tôi có thể cải thiện nó để làm cho cảnh báo biến mất. Điều đó có nghĩa là đối tượng có một bản sắc mạnh mẽ?
Điều này đúng, nhưng việc khóa các đối tượng có "nhận dạng yếu" cũng không được khuyến khích vì các lý do khác. –