【问题标题】:When is it necessary to manually decrement an event handler [duplicate]何时需要手动减少事件处理程序 [重复]
【发布时间】:2013-04-08 10:50:05
【问题描述】:

msdn 有一个小的事件处理程序示例

用线:

myNewLog.EntryWritten += new EntryWrittenEventHandler(MyOnEntryWritten);

大概这会将触发事件添加到要处理的队列中。什么从队列中删除处理程序?我还需要考虑这个吗?

【问题讨论】:

  • 我更改了逻辑,因此该行只写入一次,而不是在循环内。不再需要从队列中删除事件。

标签: c# .net event-handling


【解决方案1】:

“-=”运算符从发布者中删除订阅者。当事件的发布者的寿命比订阅者长时,不取消订阅是个问题。

更多信息herehere

【讨论】:

  • 所以在引用的示例中,我将在 Signal.Set(); 上方添加一个 -= 条目,否则与 += 版本相同;线?在我的情况下,这将是 Windows 服务的一部分,可以长时间运行,而处理程序将在一秒钟左右完成。
  • @Kal:不,myNewLog 位于不同的范围内,因此您无法在 MyOnEntryWritten 内访问它。在signal.WaitOne() 之后取消订阅是有意义的(如果您只想将AutoResetEvent 设置为signaled state 一次)。
  • 既然我想让事件重复发生,你是说我根本不应该设置-=?这种问题又回到了原点。
猜你喜欢
  • 2011-09-26
  • 1970-01-01
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多