我对 .NET (C#) 中的事件有疑问。我不得不为几种情况编写代码,其中我有一个后台任务正在运行并且我想通知主线程或控制器类发生了某些事情,例如任务完成或完成复制文件,但我没有不希望后台任务等待主线程的委托处理事件。
我想做一些类似消息传递的事情:发送消息,但谁在乎他们用它做什么。
例如:
编写一个类来依次处理多个进程,一个接一个。每个进程都需要在后台线程上运行。工作完成后,会触发一个事件并告诉控制器它已完成(假设使用 OnCompleted() 方法)
问题在于,如果控制器的事件处理程序用于启动后续进程,则先前进程的 OnComplete 方法会一直停留在调用堆栈上(永远不会完成执行),直到所有进程都完成为止。
在那种情况下,后台任务如何在不将事件引发方法保留在堆栈上的情况下通知控制器类工作已完成?
示例 2:备份程序。
后台线程运行以将每个文件复制到目标。后台需要通知UI 上次复制的文件,但不需要等待 UI 更新。相反,它只想说,“顺便说一句,这里有一些信息。现在,让我回去工作。” 事件侦听器不应阻止事件引发器的处理。