我对 c# 中的事件有疑问。当程序正在运行(例如执行循环并且需要几分钟才能完成)并且发生事件(例如 FileSystemWatcher 将调用“created”事件)时会发生什么。
事件会被忽略吗?FSW 不会调用事件,所以创建新文件会被忽略?事件发生时必须执行的代码将在循环结束后执行?
当然loop和这个事件无关,也没有使用后台worker左右。
这在很大程度上取决于实施。在这种情况下,FileSystemWatcher
我希望在系统创建的工作线程上引发该事件- 因此它将与循环同时发生。如果它是一个 UI 事件,我希望它被附加到消息循环的队列中,以便在当前阻塞 UI 线程的任何工作之后进行处理(你不应该这样做)。除非是经过深思熟虑的设计功能,否则事件会消失得无影无踪是不寻常的——这似乎不太可能。
对于由常规代码引起的许多其他事件 - 它们通常在遇到时同步处理。
所以我们有3个选择:
在这种情况下,我相信答案是“在工作线程上调用”,但所有 3 都可能更普遍地用于事件