是否有一个普遍接受的最佳实践来创建一个取消订阅自己的事件处理程序?
例如,我想出的第一件事就是:
// Foo.cs
// ...
Bar bar = new Bar(/* add'l req'd state */);
EventHandler handler = new EventHandler(bar.HandlerMethod);
bar.HandlerToUnsubscribe = handler;
eventSource.EventName += handler;
// ...
Run Code Online (Sandbox Code Playgroud)
// Bar.cs
class Bar
{
/* add'l req'd state */
// .ctor
public EventHandler HandlerToUnsubscribe { get; set; }
public void HandlerMethod(object sender, EventArgs args)
{
// Do what must be done w/ add'l req'd state
((EventSourceType)sender).EventName -= this.HandlerToUnsubscribe;
}
}
Run Code Online (Sandbox Code Playgroud)
说这种感觉很乱/坏是轻描淡写的.它与时间依赖紧密耦合(HandlerToUnsubscribe必须在恰当的时间分配精确值).在这种情况下,我觉得我必须扮演一个复杂的角色 - 我有什么愚蠢或简单的东西吗?
我正在创建UI和Winforms中的专有命令基础结构之间的绑定(使用ICommandSystem.Windows.Input中的有用).绑定基础结构的一个方面是,在UI命令组件(如工具栏按钮或菜单项)之间创建绑定的用户可以选择侦听命令的CanExecuteChanged事件,然后根据该状态更新UI的状态 …