运行 一个线程并行
running a thread in parallel
我处于更新图表的威胁中,我进入了一个进行 4 秒测量的例程。套路returns一个double。我注意到我的图表停止显示 activity 4 秒,直到我完成数据收集。我需要启动一个新线程并将 GetTXPower() activity 置于后台。所以换句话说,我希望 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();
创建一个收集数据的 void 方法(我称之为 MeasureMentMethod
)。使用以下代码创建线程:
Thread MeasurementThread = new Thread(new ThreadStart(MeasurementMethod));
然后您可以 运行 线程
MeasurementThread.Start();
如果你的线程有这样的内容:
while(true){
//Run your code here
Thread.Sleep(100);
}
那你就从头开始,它就一直在采集数据。
因此,您将拥有更新图表的主线程,并启动获取数据的线程。
我建议调查 Task Parallel Library。
Starting with the .NET Framework 4, the TPL is the preferred way to write multithreaded and parallel code.
因为您还需要从 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.
});
我处于更新图表的威胁中,我进入了一个进行 4 秒测量的例程。套路returns一个double。我注意到我的图表停止显示 activity 4 秒,直到我完成数据收集。我需要启动一个新线程并将 GetTXPower() activity 置于后台。所以换句话说,我希望 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();
创建一个收集数据的 void 方法(我称之为 MeasureMentMethod
)。使用以下代码创建线程:
Thread MeasurementThread = new Thread(new ThreadStart(MeasurementMethod));
然后您可以 运行 线程
MeasurementThread.Start();
如果你的线程有这样的内容:
while(true){
//Run your code here
Thread.Sleep(100);
}
那你就从头开始,它就一直在采集数据。
因此,您将拥有更新图表的主线程,并启动获取数据的线程。
我建议调查 Task Parallel Library。
Starting with the .NET Framework 4, the TPL is the preferred way to write multithreaded and parallel code.
因为您还需要从 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.
});