To set the stage, I have a custom class called Scheduler that holds multiple Task objects (this is a custom class as well). Each task has a BackgroundWorker object to run long running work. I am currently doing some testing of having many of these tasks executing quickly and being handled at the same time.
In my Task object, I raise an a custom event (TaskCompletedEvent) in the TaskWorkerCompleted handler to alert the scheduler that a task is completed. The scheduler uses the same event handler for every task’s TaskCompletedEvent.
What I want to know is if I am currently in the Scheduler TaskCompletedEvent handler executing code and another event finishes up, what happens? Both are going to be on the UI Thread, so does the one currently in the event handler finish up before the other one proceeds? I’m getting confused on what is going to happen when two events finish simultaneously and need to be handled.
No, the events themselves don’t know about the UI threads. So the events will be dispatched in the same thread where they are fired (this is most probably in the backgroundworker’s thread, right?)
If your both events are fired in the UI thread, this cannot be simultaneous (after all, the UI thread is executing either one or another event firing code), so the second event isd perhaps going to be fired when the first event is finished with firing and dispatching.
If you want the
Schedulerto marshal the events to the UI thread, that is a slightly different story. Your code which needs to be executed at the UI thread will be actually posted into a kind of event queue of that thread, and whatever event-firing code happens to be first, gets executed first.