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

本文关键字:什么 事件 程序 运行时 | 更新日期: 2023-09-27 18:19:40

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

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

当然,循环和这个事件无关,也没有使用任何后台工作者。

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

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

在由常规代码引起的许多其他事件的情况下,当遇到时,它们通常会被同步处理。

因此,我们有三种选择:

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

在这种情况下,我相信答案是"在工作线程上调用",但对于更普遍的

事件,这三个都是可能的