并行运行一个线程
本文关键字:一个 线程 运行 并行 | 更新日期: 2023-09-27 17:54:46
我在一个威胁中更新一个图表,我进入一个例行程序,进行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();
我建议查看任务并行库。
从。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.
});
创建一个收集数据的void方法(我将其称为MeasureMentMethod
)。使用下面的代码创建一个线程:
Thread MeasurementThread = new Thread(new ThreadStart(MeasurementMethod));
你可以用
运行这个线程MeasurementThread.Start();
如果你的线程有这样的东西:
while(true){
//Run your code here
Thread.Sleep(100);
}
那么你可以从头开始,它会一直收集数据。
那么,你会有主线程来更新图表,你会启动线程来获取数据在一边。