Я нашел мало информации о том, как правильно использовать класс Dispatcher самостоятельно.
В настоящее время Я использую его аналогично этому вопросу , но есть внутреннее состояние гонки, о котором я нигде не упоминаю.
Предположим, вы используете следующий код для запуска потока диспетчера:
Thread thread = new Thread(Dispatcher.Run);
thread.Start();
И попробуйте использовать его позже:
Dispatcher.FromThread(thread).Invoke(MyMethodDelegate);
Это часто будет вызывать исключение NullReferenceException, поскольку вызов Dispatcher.FromThread может возвращать значение null, поскольку нет гарантии, что Dispatcher .Run еще был вызван.
Что я сделал для правильной реализации этого, так это использовал сигнал, гарантирующий, что диспетчер запущен, прежде чем продолжить его использование в основном потоке.