Как и в WinForms, дизайн WPF значительно упрощен благодаря требованию доступа ко всем элементам пользовательского интерфейса только из потоков, которые их создали.
Когда вы пытаетесь написать многопоточную программу, эта «функция» может показаться серьезным ограничением. Невозможно изменить даже самые простые свойства элемента пользовательского интерфейса непосредственно из фонового потока. Если да, то как вообще использовать фоновые потоки с WPF?
Ответ заключается в том, что мы должны преобразовать наши действия, предназначенные для пользовательского интерфейса , в основной поток , где работа может выполняться без конфликтов. Строго говоря, наши действия должны выполняться в контексте потока, создавшего элемент, который мы пытаемся изменить.
Тема многопоточности в WPF довольно обширна, но вот отличная вводная статья:
Если вы прочитаете эту статью, вы увидите, как использовать Dispatcher
для выполнения ваших действий без нарушения модели потоков.