Updating the UI from a non-UI thread
User interface in WPF (as with WinForms) is managed by a single thread. More accurately, a thread that creates windows is the owner of those windows; it means that thread must process UI messages, a process usually known as message pumping. This message pumping activity is provided by the framework (in WPF it's in the Dispatcher.Run
static method; in WinForms it's Application.Run
, but the idea is the same). If the UI thread is doing a lot of work or enters a wait state (by doing some I/O, for example), it won't be able to process UI messages, causing the UI to freeze, also known as "not responding". This is very bad from a user experience standpoint, and should be avoided at all costs. The simple rule is that if some operation may be long, offload it to another thread in
some way, keeping the UI thread responsive.
Sounds simple, doesn't it? Sometimes it is simple, sometimes not so much. One of the common issues is the need to update something in the user...