【发布时间】:2019-02-01 11:36:49
【问题描述】:
我的 Windows 应用程序上运行了多个计时器。每个 timer_tick 运行一个代码。现在我正在处理两个过程。
private async void tmrProcessDelay_Tick
private async void tmrAutopay_Tick
最近刚刚将tmrAutopay 添加为附加进程,这样我就可以让它们同时工作,而不是顺序进程。我遇到的问题是我无法重新启动自动转账的过程。
当表单加载时,定时器在顶部被声明为一个实例。
private System.Windows.Forms.Timer tmrProcessDelay = new System.Windows.Forms.Timer();
private System.Windows.Forms.Timer tmrAutopay = new System.Windows.Forms.Timer();
tmrAutopay.Interval = 2000;
tmrAutopay.Enabled = false;
tmrAutopay.Tick += new EventHandler(tmrAutopay_Tick);
private async void tmrAutopay_Tick(object sender, EventArgs e)
{
messagebox("tick"); // correcting this one
txtNotes.AppendText("tick");
tmrAutopay.Enabled = false;
// do some code
tmrAutopay.Enabled = true;
}
编辑: 根据 Michael Randall 的建议,我尝试在顶部添加断点。我得到了这个问题。就逻辑而言。我只是认为它不会重新开始,因为“tick”只附加一次,所以我假设它只运行一次。当我去添加断点时,它再次滴答作响,但由于某种原因,它没有appendText,因为我确实假设了一些事情。回到问题,由于现有的逻辑,之后
- 称为第一个 - 附加文本
- enabled = true - 勾选但未附加
- 由于逻辑原因,它没有再次变为 enabled = true
计时器滴答仅在我第一次启用它后运行,然后当它滴答作响时,我将其设置为 false 以执行一些代码,然后在完成后再次启动它。
我还没有尝试this system timer 解决方案,并且还看到一些帖子说计时器不会在后台进程上运行,因为我可以运行一次,这意味着它可以......但我只是想在我改变之前问计时器是否有任何原因导致我遇到此问题?
【问题讨论】:
-
您为 VB 爱好者提出了很多 C# 问题 :) 您是说在您第一次启用它之后,它会滴答一次,然后再也不会?
-
@John 是的,没错。例如,我在表单加载时执行
tmrAutopay.Enabled = true。是的,它滴答作响,如果它真的达到 enable = true,我尝试添加一个断点,它确实如此,但它没有进入滴答方法,所以我假设计时器没有启动?我从 Visual Basic 开始,因此得名:) -
所以你从来没有看到“tick”消息框?
-
这里有很多缺失的信息,它是什么类型的计时器,你什么时候启用它(你的问题中的代码),你在cmets中提到
adding a breakpoint if it really reaches the enable = true,但你有没有尝试断点messagebox("tick"); -
你的类中有没有一个计时器实例,或者你只是用某种方法创建它并开始计时?如果你只是在一个方法中创建它 - GC可以删除计时器