我在更新图表的威胁中,我进入了一个测量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();
答案 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.
});