首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在后台并行运行

在后台并行运行
EN

Stack Overflow用户
提问于 2011-12-15 00:59:27
回答 2查看 1.1K关注 0票数 0

主要问题是:如何在后台的多个线程上运行TestingButton_Click中的代码(类似于BackgroundWorker),这样我就能够:

  1. 获取所有原始数据到所有线程的方法
  2. Cancel测试将所有结果表获取到主线程。

以下代码在TestingButton_Click中

代码语言:javascript
复制
List<Thread> threads = new List<Thread>();

            //Testing for each pair
            foreach (InterfaceWithClassName aCompound in Group1)
            {
                foreach (InterfaceWithClassName bCompound in Group2)
                {
                    InstancePair pair = new InstancePair();
                    //some code

                    if (testModeParallel)
                    {
                        Thread thr = new Thread(TestPairParallel);
                        thr.Start(pair);
                        threads.Add(thr);
                    }

                    else
                    {
                        Thread thr = new Thread(TestPairSerial);
                        thr.Start(pair);
                        threads.Add(thr);
                    }
                }
            }              

            while (true)
            {
                int i = 0;

                foreach (Thread thread in threads)
                {
                    if (thread.IsAlive)
                        break;

                    i++;
                }

                if (i == threads.Count)
                    break;

                Thread.Sleep(1000);
            }
            pairsResultsDataGrid.ItemsSource = tab.DefaultView

用户能够选择要测试的化合物,所以每次我都有不同数量的对进行测试。为了以防万一,我使用了不同的方法TestPairSerial()和TestPairParallel()。

TestPairSerial()结构是

代码语言:javascript
复制
        do
        {
            do
            {

            } while (isSetbCompaundParams);

        } while (isSetaCompaundParams);

        //filling up results into tables (main window variables) later to be connected to DataGrids

TestPairParallel()是用InfinitePartitioner实现的,并且只使用类似的结构和Parallel.ForEach(新的InfinitePartitioner(),...

谢谢你的帮助。

EN

Stack Overflow用户

回答已采纳

发布于 2011-12-15 01:37:38

如何在后台的多个线程上运行TestingButton_Click中的代码。

我会使用任务,因为它们的设计完全是为了做你想做的事情。

在你接近实际解决方案之前,我唯一要回答的问题是:

报告进度

有很多方法可以报告给定线程的进度,您必须订阅事件,并编写代码来报告线程的进度。为了更新窗体上的控件,这需要您调用更改,这不是一个微不足道的功能。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8508487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档