我想让result
(重进程的返回结果)在额外线程中执行Heavy Process
后可以访问,因为它主要是预期不希望在流程UI生效,
过程完成后可以玩result
在一些搜索和查看我的文章的过程中,我了解到有几种方法 做到这一点,请提供您知道或在类似情况下使用的最佳方法
这是我想以最佳方式处理的样本:
public ACollection DoProcess(Document docProcess)
{
ACollection result = new ACollection ();
ThreadStart threadStart = delegate
{
result = MyProcess(docProcess);
};
var threadProcess = new Thread(threadStart);
threadProcess.Start();
return result ;
}
其他可能的方法可能是 IAsyncResult、BackgroundWorker、使用计时器和检查状态,而不是将结果返回到方法来处理它并将它报告给 UI,以线程安全的方式直接将它发送到我们的 UI 控件。 ..
请给出自己的看法,并在类似案例中举例说明, 提前致谢
编辑 3:方法 - 基于 Brian 的回答
LenzCollection myResultCollection = new LenzCollection();
TaskScheduler ui = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew(() =>
{
myResultCollection = DoCollect(docProcess);
//Task.WaitAll();
return myResultCollection;
}).ContinueWith((task =>
{
myResultCollection = task.Result;
}), ui);
return myResultCollection;
还是没有等到想要的结果
最佳答案
在桌面 (WinForms/WPF) 应用程序中,最好和最简单的方法是 BackgroundWorker。它旨在处理此问题。
关于c# - 从一个额外的线程返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10138986/