【发布时间】:2014-09-04 12:15:10
【问题描述】:
我正在尝试一个非常简单的示例,将订阅的序列输出到文本框以正常工作,正如您所期望的那样,在控制台应用程序中执行此操作没有问题。
我尝试了十几种不同的调用变体,所有这些变体都抛出相同的跨线程嘶嘶声。
我读到 ObserveOnDispatcher 可能会完成这项工作?但我在任何地方都找不到。我试过 ObserveOn,你可以在下面的代码中看到,但同样的问题。
private void button1_Click(object sender, EventArgs e)
{
var source = Observable.Timer(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)).Timestamp();
source.ObserveOn(Scheduler.CurrentThread).Subscribe(x => textBox1.AppendText(x.Value.ToString()));
}
我不明白为什么以下工作正常;
source.Subscribe(x => MessageBox.Show(x.Value + " - " + x.Timestamp));
然而,将这些值写入文本框需要发脾气。
有什么想法吗?
【问题讨论】:
-
用 wpf/winforms 标记您的问题
-
我在 MSDN 论坛上找到了this post,应该可以回答您的问题。
-
这是无法从工作线程更新控件的类似问题的重复。但是,由于我们不知道您使用的是 WPF 还是 WinForms,因此无法为您指出正确的答案。
-
“这是无法从工作线程更新控件的类似问题的重复” - 虽然不是这样,因为通常调用会起作用,但它不起作用
标签: c# multithreading winforms observablecollection system.reactive