这是一个例子:
if (control.InvokeRequired)
{
control.BeginInvoke(action, control);
}
else
{
action(control);
}
如果在条件和BeginInvoke调用之间,控件被释放了,会怎样呢?
另一个例子涉及事件:
var handler = MyEvent;
if (handler != null)
{
handler.BeginInvoke(null, EventArgs.Empty, null, null);
}
如果在第一行和if语句之间取消订阅"MyEvent",if语句仍将被执行。然而,这是合适的设计吗?如果取消订阅也意味着必要状态的破坏,以便正确调用事件怎么办?这个解决方案不仅有更多的代码行(样板文件),而且不太直观,可能会导致客户端出现意外结果。
SO,你怎么看?