【发布时间】:2016-03-16 07:50:32
【问题描述】:
我在表单中有一个System.Timers.Timer 计时器。我还有一个从 RFID 设备读取的线程(功能:GetData())。我想用定时器来限制线程的时间,但是定时器没有触发。
System.Threading.Thread GetData;
System.Timers.Timer timer = new System.Timers.Timer();
int reverseCounter=1000;
public CardDragMaifareFrm()
{
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Interval = 10;
timer.Enabled = true;
timer.Start();
GetData = new Thread(new ThreadStart(ReadCardData));
GetData.Start();
}
void timer_Elapsed(object sender, EventArgs e)
{
if (reverseCounter > 0)
{
MessageBox.Show("hey");
reverseCounter -= 1;
}
else
{// some actions for terminating GetData thread}
}
但我没有看到“嘿”消息...有人可以帮助我吗?谢谢
【问题讨论】:
-
“不起作用” - 什么不起作用?你看到
MessageBox了吗?不清楚reverseCounter是什么,所以我们无法检查可能的逻辑错误。reverseCounter -= reverseCounter等于reverseCounter = 0。 -
与您的问题没有直接关系的注释:
timer.Enabled = true和timer.Start()做同样的事情 - 您应该删除其中一个。 -
@Reza 我是正确的
reverseCounter但是计时器还没有触发 -
10 毫秒不是一个很长的计时器......它似乎很奇怪,它根本不会触发。
-
System.Timers.Timer: "如果您将 System.Timers.Timer 类与用户界面元素(例如表单或控件)一起使用,但未将计时器放置在该用户界面元素上,请分配表单或包含 Timer 到
SynchronizingObject属性的控件”(尽管我通常建议切换到System.Windows.Forms.Timer,它设计从一开始就与 UI 正确互操作)
标签: c# multithreading winforms timer