我对 .NET (C#) 中的事件有疑问。我必须为几种情况编写代码,在这些情况下,我正在运行后台任务,并且我想通知主线程或控制器类发生了某些事情,例如任务已完成或完成了文件复制,但我不这样做不希望后台任务等待主线程的委托来处理事件。
我想做一些类似消息传递的事情:发送消息,但谁在乎他们用它做什么。
例如:
编写一个类来按顺序处理多个进程,一个接一个。每个进程都需要在后台线程上运行。当工作完成时,会触发一个事件并告诉控制器它已完成(假设使用 OnCompleted() 方法)
问题是,如果控制器的事件处理程序用于启动后续进程,则先前进程的 OnComplete 方法将保留在调用堆栈上(永远不会完成执行),直到所有进程完成为止。
在这种情况下,后台任务如何通知控制器类工作已完成,而不将事件引发方法保留在堆栈上?
示例2:一个备份程序。
后台线程运行以将每个文件复制到目标。背景需要notifyUI 是最后复制的文件,但不需要等待 UI 更新。相反,它只是想说:“顺便说一句,这里有一些信息。现在,让我回去工作。”事件侦听器不应阻止事件引发程序的处理。
听起来您正在尝试异步调用事件调用列表中的委托。
我建议你阅读.NET 异步事件将进程状态发送到用户界面 http://www.eggheadcafe.com/articles/asynchronous_events.asp:
.NET Framework 为我们提供了
引发事件的概念(以及其他
items)在我们的类中异步。
这意味着我们可以引发该事件
以这样的方式不具有
该事件的订阅者(通常
用户界面)按住
在提出的方法中进行处理
事件。这样做的好处是
不会产生负面影响
我们业务层的性能
方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)