我正在测试ReactiveUI,看起来非常好.
但是,我对MessageBus感到有些困惑.
示例代码:
var bus = new MessageBus();
int result = -1;
bus.Listen<int>().Subscribe(x => result = x);
bus.SendMessage(42);
Run Code Online (Sandbox Code Playgroud)
它在调用Assert语句时有效,但在标准WPF应用程序中,结果值永远不会更新.这可能是由于调度程序的实现,但我还不是很清楚.
任何提示都是受欢迎的.
结果最终更新(与调用相同Dispatcher.BeginInvoke),而不是立即更新.默认情况下,RxUI在单元测试运行器中以不同的方式调度,以便更容易编写单元测试 - 这就是您在单元测试运行器输出中看到该警告的原因.
如果你要做的事情如下:
var bus = new MessageBus();
bus.Listen<int>().Subscribe(x => MessageBox.Show("The answer is " + x));
bus.SendMessage(42);
Run Code Online (Sandbox Code Playgroud)
您将看到消息框(如果没有,它肯定是一个错误!).
为什么MessageBus被推迟?它使编写异步代码变得更容易,因为现在可以从其他线程发送SendMessage,而不会因为访问错误线程上的对象而看到WPF的可怕的InvalidOperationException.
| 归档时间: |
|
| 查看次数: |
1933 次 |
| 最近记录: |