我是C ++ / CLI的新手,我来自使用嵌入式C ++的背景。我创建了一个温度控制块,可以与PC通信以设置/读取温度。
我正在尝试创建一个循环不同温度的程序,并以1秒的间隔读取读数。我使用过" Forms Timer"这应该是每秒刻度并创建一个"事件"像嵌入式C一样,应该"中断"我的BtnTestTemp_Click()函数。
private: System::Void LogTempTimer_Tick(System::Object^ sender, System::EventArgs^ e) {
GetTemp_Click(sender, e);
tempreadingNb++;
}
private: System::Void BtnTestTemp_Click(System::Object^ sender, System::EventArgs^ e) {
//SET TO ROOM TEMP
this->TempSet->Text = "2500";
SetTemp_Click(sender, e);
//WAIT UNTIL 2500 +/- 1
while ((currenttemp > 2600)||(currenttemp < 2400)) {}
}
当不在我的BtnTestTemp_Click()函数中时,计时器工作正常,我可以看到它每秒调用一次LogTempTimer_Tick()事件。但是,坐在我的while循环中时:
while ((currenttemp > 2600)||(currenttemp < 2400)) {}
永远不会调用LogTempTimer_Tick()函数,并且永远不会更新当前的temp。
为什么事件在其他功能期间不会触发?我应该做些什么才能让它进入&#34;中断&#34;另一个功能?
感谢。
答案 0 :(得分:0)
这种类型的计时器是针对单线程应用程序而制作的。 IE当前在按钮单击中执行的相同线程是用于执行计时器滴答的线程。因此,在其他事件完成之前,它无法执行该事件。
查看System.Timers中的计时器,了解可在多线程环境中使用的内容