C# 何时需要手动减少事件处理程序

C# 何时需要手动减少事件处理程序,c#,.net,event-handling,C#,.net,Event Handling,下面是一个小事件处理程序示例 用这句话: myNewLog.EntryWritten += new EntryWrittenEventHandler(MyOnEntryWritten); 这可能会将触发事件添加到要处理的队列中。什么将处理程序从队列中移除?我甚至需要考虑这个问题吗?运算符“-=”从发布服务器中删除订阅服务器。当事件的发布者比订阅者的寿命长时,不取消订阅是一个问题 更多信息和。“-=”操作符从发布服务器中删除订阅服务器。当事件的发布者比订阅者的寿命长时,不取消订阅是一个问题 更多

下面是一个小事件处理程序示例

用这句话:

myNewLog.EntryWritten += new EntryWrittenEventHandler(MyOnEntryWritten);
这可能会将触发事件添加到要处理的队列中。什么将处理程序从队列中移除?我甚至需要考虑这个问题吗?

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

更多信息和。

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


更多信息和。

因此,在引用的示例中,我将在Signal.Set()的正上方添加一个-=条目,否则与+=版本相同;线路?在我的情况下,这将是一个Windows服务的一部分,该服务可能会持续运行很长时间,而处理程序将在一秒钟左右完成。@Kal:不,
myNewLog
位于不同的作用域中,因此您无法在
MyEntryWrite
中访问它。在
signal.WaitOne()
之后取消订阅是有意义的(如果您想将
AutoResetEvent
设置为仅一次)。由于我希望事件重复发生,您是说我根本不应该设置-=吗?这样的问题又回到了一个完整的循环中,所以在引用的示例中,我将在Signal.Set()的正上方添加一个-=条目,否则与+=版本相同;线路?在我的情况下,这将是一个Windows服务的一部分,该服务可能会持续运行很长时间,而处理程序将在一秒钟左右完成。@Kal:不,
myNewLog
位于不同的作用域中,因此您无法在
MyEntryWrite
中访问它。在
signal.WaitOne()
之后取消订阅是有意义的(如果您想将
AutoResetEvent
设置为仅一次)。由于我希望事件重复发生,您是说我根本不应该设置-=吗?我改变了逻辑,使这行代码只写了一次,而不是在循环中。不再需要从队列中删除该事件。我更改了逻辑,使该行只写入一次,而不是在循环中。不再需要从队列中删除事件。