并行运行一个线程

时间:2015-06-09 15:05:20

标签: c# .net multithreading parallel-processing

我在更新图表的威胁中,我进入了一个测量4秒的例行程序。例程返回一个double。我注意到的是,在我收集数据之前,我的图表停止显示活动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();

2 个答案:

答案 0 :(得分:1)

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

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

然后您可以使用

运行该线程
MeasurementThread.Start();

如果你的主管有这样的东西:

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

然后你可以在开始时启动它,它将继续收集数据。

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

答案 1 :(得分: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.
});