我正在为C#制作自定义事件,有时它不起作用.
这就是我让事件发生的方式:
private bool isDoorOpen;
public bool IsDoorOpen {
get { return isDoorOpen;}
private set { isDoorOpen = value; DoorsChangeState(this, null);}
}
Run Code Online (Sandbox Code Playgroud)
这些是事件声明:
//events
public delegate void ChangedEventHandler(Elevator sender, EventArgs e);
public event ChangedEventHandler PositionChanged;
public event ChangedEventHandler DirectionChanged;
public event ChangedEventHandler BreaksChangeState;
public event ChangedEventHandler DoorsChangeState;
Run Code Online (Sandbox Code Playgroud)
只要有事件附加了方法,这就有效,但如果没有,则抛出空引用异常.我究竟做错了什么?
Cam*_*and 10
调用事件的推荐方法是
var handler = this.DoorsChangeState;
if (handler != null)
handler(this, null);
Run Code Online (Sandbox Code Playgroud)
在本地复制处理程序的原因是当您检查null时,在另一个线程上更改事件处理程序.
编辑:发现文章谈论竞争条件. http://blogs.msdn.com/ericlippert/archive/2009/04/29/events-and-races.aspx
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |