3

我对 c# 中的事件有疑问。当程序正在运行(例如执行循环并且需要几分钟才能完成)并且发生事件(例如 FileSystemWatcher 将调用“created”事件)时会发生什么。

事件会被忽略吗?FSW 不会调用事件,所以创建新文件会被忽略?事件发生时必须执行的代码将在循环结束后执行?

当然loop和这个事件无关,也没有使用后台worker左右。

4

1 回答 1

4

这在很大程度上取决于实施。在这种情况下,FileSystemWatcher我希望在系统创建的工作线程上引发该事件- 因此它将与循环同时发生。如果它是一个 UI 事件,我希望它被附加到消息循环的队列中,以便在当前阻塞 UI 线程的任何工作之后进行处理(你不应该这样做)。除非是经过深思熟虑的设计功能,否则事件会消失得无影无踪是不寻常的——这似乎不太可能。

对于由常规代码引起的许多其他事件 - 它们通常在遇到时同步处理。

所以我们有3个选择:

  • 由引起线程同步处理
  • 在工作线程上调用
  • 添加到 UI 线程的队列(通常通过“同步上下文”)

在这种情况下,我相信答案是“在工作线程上调用”,但所有 3 都可能更普遍地用于事件

于 2013-06-23T22:52:55.297 回答