Threading
Updating The UI From Another Task
In WPF, the “Dispatcher” is the way to call a function that belongs to a class in one thread from another thread.
As long as the class you are calling supports the Dispatcher
object (all UI classes such as Window
do), you can use the following code. Note that the function to execute is defined in the function call to BeginInvoke()
.
If you want the calling thread to wait until the dispatcher function has run to completion before continuing (i.e. synchronous execution), you can use the Invoke()
method rather than BeginInvoke()
.
Locking
Locking is the common way of making thread-safe code in C#. It is done with the keyword lock, which is a native keyword in C# (it doesn’t require any library or .dll to be included for it to work).
A lock can be taken out on any object, although it is common to make a separate object of type object
, just for locking.
Queues
Queues are a good way of passing information between two asynchronous threads. The .NET language supports queues with the System.Collections.Generic.Queue<T>
class.
The actual objects that are queued can be defined as any standard class. To be thread-safe, reading and writing from the queue (enqueue and dequeue respectively), requires the use of a lock so you don’t happen to be half way through writing to it when you start to read from it.