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