ReactiveUI messagebus - PullRequest
       5

ReactiveUI messagebus

3 голосов
/ 29 апреля 2011

Я тестирую ReactiveUI, кажется, очень приятно.

Тем не менее, я немного озадачен MessageBus.

Пример кода:

var bus = new MessageBus();
int result = -1;

bus.Listen<int>().Subscribe(x => result = x);
bus.SendMessage(42);

Он работает при вызове оператора Assert, но в стандартном приложении WPF значение результата никогда не обновляется. Вероятно, это связано с реализацией планировщика, но мне пока не совсем понятно.

Любая подсказка приветствуется.

1 Ответ

9 голосов
/ 29 апреля 2011

Результат в конечном итоге обновляется (аналогично вызову Dispatcher.BeginInvoke), а не сразу.По умолчанию RxUI по-разному планирует вещи в модуле выполнения модульных тестов, чтобы упростить написание модульных тестов - вот почему вы видите это предупреждение в выводе модуля модульных тестов.1006 *

var bus = new MessageBus();

bus.Listen<int>().Subscribe(x => MessageBox.Show("The answer is " + x));
bus.SendMessage(42);

Вы увидите окно сообщения (если нет, то это определенно ошибка!).

Почему задерживается MessageBus?Это облегчает написание асинхронного кода, поскольку теперь вы можете SendMessage из других потоков, не видя страшного InvalidOperationException WPF из-за доступа к объектам в неправильном потоке.

...