【问题标题】:running a thread in parallel并行运行一个线程
【发布时间】:2015-06-09 15:05:19
【问题描述】:

我处于更新图表的威胁中,我进入了一个测量 4 秒的例程。该例程返回一个双精度数。我注意到的是,我的图表停止显示活动 4 秒钟,直到我完成收集数据。我需要启动一个新线程并将 GetTXPower() 活动置于后台。所以换句话说,我希望 GetTXPower() 和图表并行运行。有什么建议么?

这是我的代码:

             stopwatch.Start();
            // Get Tx Power reading and save the Data
            _specAn_y = GetTXPower();
            _pa_Value = paData.Start;
            DataPoint.Measurement = _specAn_y;
            //Thread.Sleep(50);
            double remaining = 0;                
            do
            {
              charting.stuff  
            }
            uxChart.Update();

【问题讨论】:

    标签: c# .net multithreading parallel-processing


    【解决方案1】:

    我建议查看Task Parallel Library

    从 .NET Framework 4 开始,TPL 是编写多线程和并行代码的首选方式。

    由于您还需要从GetTXPower 返回结果,因此我将使用Task<double>

    Task<double> task = Task.Factory.StartNew<double>(GetTXPower);
    

    根据您何时需要结果,您可以通过检查task.IsCompleted 来查询任务是否已完成,或者通过调用task.Wait() 阻塞线程并等待任务完成。您可以通过task.Result 属性获取结果。

    另一种方法是在初始任务中添加一个延续:

    Task.Factory.StartNew<double>(GetTXPower).ContinueWith(task => 
    {
        // Do something with the task result.
    });
    

    【讨论】:

    • 很好的推荐。谢谢
    【解决方案2】:

    创建一个收集数据的 void 方法(我称之为MeasureMentMethod)。使用以下代码创建线程:

    Thread MeasurementThread = new Thread(new ThreadStart(MeasurementMethod));
    

    然后您可以使用

    运行线程
    MeasurementThread.Start();
    

    如果你的线程有这样的东西:

    while(true){
        //Run your code here
        Thread.Sleep(100);
    }
    

    然后你可以从头开始,它会一直收集数据。

    因此,您将拥有将更新图表的主线程,并且您将启动将获取数据的线程。

    【讨论】:

    • @Patrick vD 感谢您的建议。我的方法返回一个双精度,所以这不能按预期工作 public double GetTXPower()
    • @Patrick vD 我收到一条错误消息,指出该方法返回了错误的类型
    • @Patrick vD 我将方法类型更改为 void,现在似乎可以工作了。我仍在处理细节。
    • @Sophman 好的,抱歉没有看到任何这些消息。我的建议是使用List&lt;double&gt; 来获取所有结果。你可以用listName[liastName.Length-1]; 抓住最后一个双倍。然后让您的 void 将值存储在 List 中,而不是返回双精度值。
    猜你喜欢
    • 1970-01-01
    • 2022-01-18
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2021-04-30
    相关资源
    最近更新 更多