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