2015-06-09 61 views
0

我在更新图形的威胁之内,我进入了一个例程,该程序进行了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(); 

回答

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. 
}); 
+0

伟大的建议。谢谢 – Sophman

1

做一个无效的方法(我称之为MeasureMentMethod)收集的数据。

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

那么你可以:

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

然后,您可以用

MeasurementThread.Start(); 

如果你的线程有像这样运行的线程:在使用下面的代码创建一个线程从一开始就启动它,它将继续收集数据。

所以,你会让你的主线程更新图表,并且你会启动线程来获取数据。

+0

或使用ThreadPool.QueueUserWorkItem – pm100

+0

@帕特里克VD感谢您的建议。我的方法返回一个双,所以这是行不通的预期公共双重GetTXPower() – Sophman

+0

@Patrick vD我得到一个错误,说该方法返回错误的类型 – Sophman