如何让Timer Tick事件中断另一个函数C ++ / CLI

时间:2016-12-07 00:31:54

标签: c++ events timer

我是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;另一个功能?

感谢。

1 个答案:

答案 0 :(得分:0)

这种类型的计时器是针对单线程应用程序而制作的。 IE当前在按钮单击中执行的相同线程是用于执行计时器滴答的线程。因此,在其他事件完成之前,它无法执行该事件。

查看System.Timers中的计时器,了解可在多线程环境中使用的内容