|
|
1
3
请注意,委托是引用类型,其默认值为null。 其他人提出的解决方案(即在触发事件之前检查null)不是线程安全的,因为侦听器可能在null检查和触发事件之间取消订阅事件。
但这有一个竞争条件,即处理程序可能会在取消订阅事件后触发,这可能会破坏应用程序的状态。 处理这两个问题的一个解决方案是将事件初始化为空白处理程序,例如。
然后在没有任何检查的情况下发射。
http://blogs.msdn.com/b/ericlippert/archive/2009/04/29/events-and-races.aspx Lippert指出,完全删除“取消注册后触发处理程序”问题需要 处理程序 他们自己写得很好。 |
|
|
2
4
我建议您使用一种非常有用的扩展方法:
这会帮你结账的。
|
|
|
3
2
底部的事件是
将事件分配给变量时,它是线程安全的。但是,您可能会丢失已删除或已添加的方法,该方法是在原子操作之间添加的(赋值->空检查->调用)。 |
|
|
4
2
这是正常的行为。在.NET中抛出事件的传统模式是使用一个名为
|
|
|
5
1
这是正常的行为。要避免此情况,请在调用事件订户之前始终测试它是否存在:
|
|
|
6
1
还有另一种方法:空对象模式:
|
|
|
7
0
是的,您需要检查null。事实上,有一个正确的方法:
|
|
OREO · 如何在不实际单击复选框的情况下选中它 2 年前 |
|
|
Dan · 在元素外部设置html点击处理程序点击后立即触发 2 年前 |
|
|
Mero · Svelte在父事件调用上调用新的嵌套事件处理程序 2 年前 |
|
|
iorice · usercontrol dll中的组件事件 3 年前 |
|
|
Awin · 点击事件功能不适用于Vue组件 3 年前 |
|
|
Kiwi · 将可共享的自定义数据添加到事件MS图形api 3 年前 |