簡體   English   中英

Winforms Timer不打勾的任何原因?

[英]Any reason why Winforms Timer does not tick?

我的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;
    }

編輯:根據邁克爾·蘭德爾的建議,我嘗試在頂部添加斷點。 我知道了 只是邏輯上。 我只是認為它不會再開始,因為“ tick”僅追加一次,因此我認為它只運行了一次。 當我添加斷點時,它再次打勾,但是由於某種原因,它沒有appendText ,因為我確實承擔了一切。 回到問題,由於現有的邏輯,之后

  1. 稱為勾號一-appendtext
  2. enabled = true-選中但未附加
  3. 由於邏輯原因,它沒有再次轉到enabled = true

計時器滴答僅在我第一次啟用它后運行,然后在滴答時將其設置為false以執行一些代碼,然后在完成后再次啟動它。

我尚未嘗試使用該系統計時器解決方案,並且還看到一些帖子說計時器不會在后台進程上運行,因為我可以一次運行它,這意味着它可以運行。但是我只是想問一下在更換計時器之前是否有有什么原因導致我遇到這個問題?

如果要進行類似后台的處理,則可以執行窗口服務應用程序,並在該代碼中實現多個計時器。 我在這種類型的應用程序方面具有良好的工作經驗,並且我相信它可以正常工作,並且不會影響多個計時器。 在代碼中,您唯一需要注意的是,如果某些代碼花費的時間比預期的長,並且超過了計時器的間隔,則它將啟動另一個線程,該線程最終可能導致該計時器的死鎖或使應用程序崩潰。 每個計時器獨立工作,並且每次滴答時都會創建一個新線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM