Multi Threaded Events And Event Handler

Multi-threaded events and event handling

Problem:

  • Multi-threaded application — one of the threads is listening on some resource (e.g. Network) for data, and then exposes events (e.g. "new data").
  • These events are consumed on a different thread — say the one that updates a UI textbox.
  • .NET Framework barfs and says, "wtf is this?"

Solution:

  • Funnel the event calls through to the UI thread via an AsyncOperation.Post method.
  • Basically, the "Post" function takes a delegate (anonymous function), and calls that with the original thread.

Requirements:

  • The "originating thread" (i.e. context) must be specified, or the funnel doesn't know where to dump the events.

Sample code:

...
AsyncOperation operation;
public event EventHandler AnEventOccurred;
...
 
// in the Constructor:
this.operation = AsyncOperationManager.CreateOperation(null);
 
// to call the event...
this.operation.Post(new SendOrPostCallback(delegate(object state) { 
   this.AnEventOccurred(this, EventArgs.Empty); 
}), null);

Relevant Links:

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License