如何DumpLive长时间运行过程的结果?

时间:2014-08-15 19:26:18

标签: system.reactive linqpad

我试过了Observable.Create

在显示任何结果之前等待完成。 可能是因为我试图遵循的例子是改变现场价值,而不是改变现场收藏。

ObservableCollection<FileAnalysisResult> fileAnalysisResults = new ObservableCollection<FileAnalysisResult>();

我似乎无法申请,因为.DumpLive()不适用于ObservableCollection

1 个答案:

答案 0 :(得分:2)

简短回答:使用LINQPad的DumpContainer

var dc = new DumpContainer().Dump();

for (int i = 0; i < 100; i++)
{
    dc.Content = i;
    Thread.Sleep(100);
}

长答案DumpContainer写入LINQPad的标准HTML结果窗口,因此您可以在主要线程被阻止时看到值更改,而调用DumpLive时IObservable使用WPF控件来呈现更新,因此主线程必须保持解除阻塞状态才能在发生更新时查看更新。

还可以转储WPF或Windows窗体控件并将其更新到位:

var txt = new TextBox().Dump();
for (int i = 0; i < 100; i++)
{
    txt.Text = i.ToString();
    await Task.Delay(100);
}

DumpLive一样,您必须小心不要阻止主线程。如果您将await Task.Delay替换为Thread.Sleep,则会阻止UI线程,直到结束时才会显示任何内容。