क्या थ्रेड-सुरक्षित के नीचे कार्यान्वयन है? यदि नहीं, तो मुझे क्या याद आ रहा है? क्या मुझे कहीं volatile
कीवर्ड चाहिए? या OnProcessingCompleted
विधि में कहीं लॉक? यदि हां, तो कहाँ?सी #: थ्रेड-सुरक्षित घटनाएं
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);
}
}
नोट: कारण है कि मैं निजी घटना और स्पष्ट इंटरफेस सामान है, क्योंकि यह एक सार आधार वर्ग है। और इससे प्राप्त वर्गों को उस घटना के साथ कुछ भी नहीं करना चाहिए। वर्ग आवरण जोड़ा गया है ताकि यह और अधिक स्पष्ट है =)
(टिप्पणी करने के लिए उत्तर दिया) –