Как мне избежать состояния гонки при использовании Dispatcher.Run ()?

Я нашел мало информации о том, как правильно использовать класс Dispatcher самостоятельно.

В настоящее время Я использую его аналогично этому вопросу , но есть внутреннее состояние гонки, о котором я нигде не упоминаю.

Предположим, вы используете следующий код для запуска потока диспетчера:

Thread thread = new Thread(Dispatcher.Run);
thread.Start();

И попробуйте использовать его позже:

Dispatcher.FromThread(thread).Invoke(MyMethodDelegate);

Это часто будет вызывать исключение NullReferenceException, поскольку вызов Dispatcher.FromThread может возвращать значение null, поскольку нет гарантии, что Dispatcher .Run еще был вызван.

Что я сделал для правильной реализации этого, так это использовал сигнал, гарантирующий, что диспетчер запущен, прежде чем продолжить его использование в основном потоке.

5
задан Community 23 May 2017 в 10:09
поделиться