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 ...