运行 一个线程并行

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