Winforms Timer无法打勾的任何原因?

时间:2019-02-01 03:03:07

标签: c# .net winforms timer

我在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,因为我确实承担了一切。回到问题之后,由于现有逻辑,

  1. 称为第一个勾号-appendtext
  2. enabled = true-选中但未附加
  3. 由于逻辑原因,它没有再次变为enabled = true

计时器滴答仅在我第一次启用它后运行,然后在滴答时将其设置为false以执行一些代码,然后在完成后再次启动它。

我还没有尝试this system timer解决方案,并且还看到一些帖子说计时器不会在后台进程上运行,因为我可以一次运行它,这意味着它可以..但是我只想问一下如果有任何原因导致我遇到此问题,我会更改计时器吗?

1 个答案:

答案 0 :(得分:-1)

如果要进行类似后台的处理,则可以执行窗口服务应用程序,并在该代码中实现多个计时器。我在这种类型的应用程序方面具有良好的工作经验,并且我相信它可以正常工作,并且不会影响多个计时器。在代码中,您唯一需要注意的是,如果某些代码花费的时间比预期的长,并且超过了计时器的间隔,则它将启动另一个线程,该线程最终可能导致该计时器的死锁或使应用程序崩溃。每个计时器独立工作,并在每次计时时创建一个新线程。