在程序运行时发生事件时会发生什么

时间:2013-06-23 22:49:43

标签: c# .net

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

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

当然循环与此事件无关,也没有使用后台工作人员。

1 个答案:

答案 0 :(得分:4)

这在很大程度上取决于实施。在FileSystemWatcher的情况下,我希望在系统创建的工作线程上引发该事件 - 因此它将与循环同时发生。如果它是一个UI事件,我希望它被附加到消息循环的队列,在当前阻止UI线程(你不应该这样做)的任何工作之后进行处理。除非那是一个刻意的设计特征,否则一个事件就会消失在任何地方都是不寻常的 - 这似乎不太可能。

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

所以我们有3个选择:

  • 由导致线程
  • 同步处理
  • 在工作线程上调用
  • 添加到UI线程的队列中(通常通过“sync-context”)

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