如何转储长时间运行的进程的实时结果



我试过Observable.Create

等待完成,然后再显示任何结果。可能是因为我尝试遵循的示例是不断变化的实时值,而不是不断变化的实时集合。

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

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

简短回答:使用 LINQPad 的DumpContainer

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

长答案DumpContainer写入 LINQPad 的标准 HTML 结果窗口,因此您可以在主线程被阻止时看到值就地更改,而在 IObservable 上调用 DumpLive 使用 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 线程,直到最后才会显示任何内容。

最新更新