c# - 从一个额外的线程返回结果

标签 c# multithreading

我想让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/

相关文章:

c# - 返回 .NET Core 中 DocumentDB 中新创建文档的 id

c# - 无法将 'int' 隐式转换为 'bool'

multithreading - SMT 和超线程 : threads vs process

javascript - Node.js worker_threads 模块是真正的线程还是只是带有 IPC 的进程?

c# - 是否可以将大的本地化字符串换成他们自己的文件?

C# 特殊字符

python - 如何在 Cython 中为多线程 C++ 类发布 GIL?

multithreading - 锁定VS内存屏障

c# - 使用泛型解析json模型的转换器

c++ - 与另一个线程中的循环通信