【发布时间】:2020-02-14 19:43:27
【问题描述】:
我有一个 Windows 窗体应用程序,我需要一个计时器工作 90 秒,并且在它过去后每一秒都应该显示,有点像秒表 1..2..3 等,在 90 秒结束后,它应该抛出异常,表明有问题。
我有以下代码,但 RunEvent 永远不会触发。
private void ScanpXRF()
{
bool demo = false;
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
try
{
for (int timerCounter = 0; timerCounter < 90; timerCounter++)
{
timer.Interval = 1000;
timer.Tick += new EventHandler(RunEvent);
timer.Start();
if(timerCounter == 89) {
throw new Exception();
}
}
}
catch (Exception e)
{
timer.Dispose();
MessageBox.Show("There is a problem!");
}
}
private void RunEvent(object sender, System.EventArgs e)
{
//boxStatus.AppendText("RunEvent() called at " + DateTime.Now.ToLongTimeString() + "\n");
MessageBox.Show("timer fired!");
}
我在这里做错了什么还是有其他建议可以通过其他方式达到相同的结果?
【问题讨论】:
-
你没有打电话给
ScanpXRF()。如果你这样做了,你会看到立即抛出异常。 -
是的,我正在调用它。我有断点,这不是问题。
-
哇,等一下...我可能读错了,但是为什么你要循环 91 次并重新设置间隔,甚至(再次)订阅 Tick,然后再次调用 Start ?我不经常使用计时器,但这对我来说真的很奇怪。
-
但是你应该打这个:
throw new Exception()非常快。您的代码中没有任何内容可以阻止它到达那里。你使用的那个循环搞砸了。 -
我的评论被删除了 我的也是。指出 MessageBox 在这里不是一个很好的帮助是一个有用的提示 imo。我想知道是谁和为什么这样做的? CoC涟漪?我在黑名单上吗?