¿La implementación es segura para subprocesos? Si no, ¿qué es lo que me estoy perdiendo? ¿Debo tener las palabras clave volatile
en alguna parte? ¿O un bloqueo en algún lugar del método OnProcessingCompleted
? ¿Si es así, donde?C#: eventos seguros contra subprocesos
public abstract class ProcessBase : IProcess
{
private readonly object completedEventLock = new object();
private event EventHandler<ProcessCompletedEventArgs> ProcessCompleted;
event EventHandler<ProcessCompletedEventArgs> IProcess.ProcessCompleted
{
add
{
lock (completedEventLock)
ProcessCompleted += value;
}
remove
{
lock (completedEventLock)
ProcessCompleted -= value;
}
}
protected void OnProcessingCompleted(ProcessCompletedEventArgs e)
{
EventHandler<ProcessCompletedEventArgs> handler = ProcessCompleted;
if (handler != null)
handler(this, e);
}
}
Nota: La razón por la que tengo evento privado y cosas por el interfaz explícita, se debe a que es una clase base abstracta. Y las clases que heredan de él no deberían hacer nada directamente con ese evento. Se ha añadido el contenedor de clase para que sea más claro =)
(respondió al comentario) –