你如何讓你的對象線程安全的實現INotifyPropertyChanged?我不能使用SynchronizationContext,因爲我需要能夠序列化對象。如何在沒有SynchronizationContext的情況下使用INotifyPropertyChanged進行線程安全?
protected void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
// What can I add here to make it thread-safe?
handler(this, new PropertyChangedEventArgs(propertyName));
}
「我不能使用SynchronizationContext,因爲我需要能夠序列化對象。」 - 這不應該是一個問題。你是否用'[NonSerialized]'標記了字段並添加了一個'OnDeserializing'方法來在反序列化時重置它? – hvd 2012-04-12 19:19:28
我沒有。有沒有比在我創建對象時在SynchronizationContext中發送代碼時更容易的方法?或者我只是太懶惰了:D – Stephen 2012-04-12 19:23:24
如果您在希望事件處理程序運行的相同上下文中創建對象,則可以在該對象的構造函數中將該字段設置爲「SynchronizationContext.Current」,否則,我不確定最好的辦法是什麼。 – hvd 2012-04-12 19:26:54