0

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

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

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

4

1 回答 1

1

不,事件本身不知道 UI 线程。因此,事件将在触发它们的同一线程中调度(这很可能在后台工作线程中,对吗?)

如果您的两个事件都在 UI 线程中触发,则这不能同时发生(毕竟,UI 线程正在执行一个或另一个事件触发代码),因此第二个事件可能会在第一个事件完成时触发发射和调度。

如果您想将Scheduler事件编组到 UI 线程,那是一个稍微不同的故事。您需要在 UI 线程上执行的代码实际上将被发布到该线程的一种事件队列中,并且无论哪个事件触发代码恰好是第一个,都会首先执行。

于 2012-07-30T16:33:27.853 回答