最近做一个校准项目,需要10次校准,但是里面各种硬件控制开了很多线程,需要等待一次校准得出数据,再在得出的数据上进行下一步的循环。
各种Thread、Task、Timer都试过,超级纠结,主要是没等到一次校准结束,就开始进入下次循环了。
最终在大神的帮助下,解决问题。
方法:
using System.Threading.Tasks;
using System.Threading;
TaskFactory uiFactory = new TaskFactory(TaskScheduler.FromCurrentSynchronizationContext());
void *****cmd()
{
************//一些前面的工作
Thread checkFinishedthread = new Thread(() => CheckIfFinishedThread());
checkFinishedthread.IsBackground = true;
checkFinishedthread.Start();
}
void CheckIfFinishedThread()
{
for (int i = 0; i < 10;i++ )
{
uiFactory.StartNew(() => ******).Wait();
//一些赋值语句,一定要放在uiFactory中哦,因为这个还出现了Must create DependencySource on same Thread as the DependencyObject.的错误。
uiFactory.StartNew(()=>需要等待执行结束的程序).Wait();
while (未达到等待的条件)
{
Thread.Sleep(30);
}
if (达到条件)
{
数据处理
}
}
}
这样就能等待每次Calibration结束再进行下一个循环了。