重新触发VB子程序,如何序列化执行?

时间:2009-03-14 06:40:55

标签: .net vb.net

很抱歉,如果这是一个新手问题。

我有一个由计时器触发的VB.NET子程序。我发现有时,如果例程运行很长时间,例程将在它仍然以不可预测的结果运行时再次触发。这是正常的吗?该例程的每个副本都在自己的线程中运行吗?有没有办法序列化例程?现在我使用一个布尔值,我在输入时设置为True,在我完成时设置为False,这样我可以在输入时检查例程是否正在运行,但我认为可能会有更优雅的东西。

2 个答案:

答案 0 :(得分:2)

开始执行子程序时停止计时器,并在退出时再次启动计时器。

您可能应该包含错误处理,以便即使在意外退出时也会重新启动计时器。

答案 1 :(得分:1)

System.Windows.Forms.Timer是单线程的,所以我很惊讶你在Tick事件已经运行时被调用(根据定义,UI线程应该被占用,并且无法打电话)

我可以看到排队的Tick事件,并按顺序发生......

System.Timers.Timer是多线程的,可能会出现您描述的情况。 (如果您正在使用其中之一,切换到System.Windows.Forms.Timer至少会阻止事件互相中断)