En mi aplicación tengo un formulario que inicia el proceso de sincronización y por varias razones quiero permitir que solo se ejecute una sincronización a la vez. Así que agregué un campo de bool estático a mi formulario que indica si la sincronización está en progreso y agregué un bloqueo para establecer este campo en verdadero si aún no estaba configurado para que el primer subproceso pueda iniciar la sincronización pero cuando se ejecute cada otro subproceso que intentará comenzar, terminará.C# bloqueo y advertencia de análisis de código CA2002
Mi código es algo como esto:
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();
}
}
}
}
Esto está funcionando bien pero cuando corro análisis de código en mi proyecto estoy recibiendo el siguiente mensaje de advertencia:
CA2002: Microsoft. Confiabilidad: 'SynchronizationForm.SynchronizationForm_Shown (object, EventArgs)' se bloquea en una referencia de tipo 'Tipo'. Reemplace esto con un candado contra un objeto con fuerte identidad.
¿Alguien puede explicarme qué pasa con mi código y cómo puedo mejorarlo para que desaparezca la advertencia? ¿Qué significa que el objeto tiene una fuerte identidad?
Esto es cierto, pero el bloqueo de objetos con "identidad débil" tampoco es aconsejable por otras razones. –