gre*_*man 0 c# events multithreading
我有几个具有PropetyChanged事件的对象的后端.更改某些属性后,将触发通知.在前端,我有用WPF编写的GUI,并且几个属性直接绑定到WPF小部件.
为了使GUI响应,所有计算都在另外的线程中完成.
所以,一般来说,经典的WPF应用程序.
public void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name)); // (*)
}
Run Code Online (Sandbox Code Playgroud)
此代码发送通知,但它会在(*)处抛出异常,因为PropertyChanged为null(是的,在检查null之后).
我的猜测是因为在WPF中重新绑定 - 在我的代码中我更改了发件人,因此WPF必须取消注册接收器并将其注册到新发件人.很少抛出异常(我每次执行约40000次执行一次异常,每次执行大约相当于发送者的一次更改)但确实发生了.
现在 - 如何正确锁定PropertyChange,所以我可以检查null并将通知作为原子操作发送?我不想通过反复试验来做到这一点,因为我可以在每次执行第1M次时发现副作用.
有一种模式可以解决这个问题:
var evt = PropertyChanged;
if ( evt != null ) evt( this, new PropertyChangedEventArgs( name ) );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |