В моем приложении есть форма, которая запускает процесс синхронизации, и по ряду причин я хочу разрешить запускать только одну синхронизацию одновременно. Поэтому я добавил в форму статическое поле 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) блокирует ссылку типа «Тип». Замените это на блокировку объекта с сильной идентичностью.
Может кто-нибудь объяснить мне, что не так с моим кодом и как я могу улучшить его, чтобы предупреждение исчезло. Что это значит, что объект имеет сильную идентичность?