何时处理事件已处理?

时间:2012-07-30 16:28:27

标签: c# .net multithreading

要设置舞台,我有一个名为Scheduler的自定义类,它包含多个Task个对象(这也是一个自定义类)。每个任务都有一个BackgroundWorker对象来运行长时间运行的工作。我目前正在做一些测试,让很多这些任务快速执行并同时处理。

在我的Task对象中,我在TaskCompletedEvent处理程序中引发了一个自定义事件(TaskWorkerCompleted),以提醒调度程序任务已完成。调度程序为每个任务的TaskCompletedEvent使用相同的事件处理程序。

我想知道的是,如果我目前在执行代码的Scheduler TaskCompletedEvent处理程序中并且另一个事件结束,会发生什么?两者都将出现在UI线程上,那么当前事件处理程序中的一个在另一个进程之前完成了吗?当两个事件同时完成并需要处理时,我会对将要发生的事情感到困惑。

1 个答案:

答案 0 :(得分:1)

不,事件本身并不了解UI线程。所以事件将被发送到它们被触发的同一个线程中(这很可能是在后台工作者的线程中,对吗?)

如果在UI线程中触发了这两个事件,则这不能同时发生(毕竟,UI线程正在执行一个或另一个事件触发代码),因此第二个事件可能会在第一个事件时被触发完成了解雇和派遣。

如果您希望Scheduler将事件封送到UI线程,那就是一个稍微不同的故事。您需要在UI线程中执行的代码实际上将被发布到该线程的一种事件队列中,并且无论事件触发代码是先发生的,都会先执行。