2015-06-09 89 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