線程安全以下的實現?如果不是我錯過了什麼?我應該在哪裏有volatile
關鍵字?或在OnProcessingCompleted
方法中的某處鎖定?如果是這樣,在哪裏?C#:線程安全事件
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);
}
}
注:我之所以有私人事件和顯式接口的東西,是因爲它是一個抽象基類。而從它繼承的類不應該直接對該事件做任何事情。添加類包裝,使其更加清晰=)
(回覆評論) – 2009-06-24 12:48:31