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:
page revision: 0, last edited: 05 May 2008 02:46