你如何让你的对象线程安全的实现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