簡體   English   中英

c# 聊天 window 應用程序問題與定時器

[英]c# chat window application problem with timer

我正在開發一個聊天應用程序。 為了獲得頻繁的請求、消息和區域請求,我使用一個計時器並調用 timer.now 上的所有方法。 問題是,當我單擊應用程序中的任何控件時,由於計時器正在運行,這會給我一個遲到的響應。 它首先掛起,直到完成計時器代碼,然后控制點擊事件被觸發。

因此,感謝有關如何處理此問題的任何幫助,我也嘗試了線程,但這沒有幫助。

如果你有,請給我任何想法。

謝謝。

Use System.Timers.Timer or System.Threading.Timer instead of the Windows.Windows.Forms.Timer , and inside the Elapced event handler whenever you call methods or properties on UI controls use control.InvokeRequired and control.Invoke .

表單計時器的問題在於它在 UI 線程上執行操作,來自msdn

Windows 定時器專為單線程環境而設計,其中 UI 線程用於執行處理

編輯:這是使用System.Timers.Timer的示例:

private System.Timers.Timer _chatTimer = new System.Timers.Timer();

public Form1()
{
    InitializeComponents();

    _chatTimer.Interval = 1000;//1 seconds
    _chatTimer.Elapsed += OnChatTimerElapsed;
    _chatTimer.AutoReset = true;
}

private void OnChatTimerElapsed(object sender, System.Timer.ElapsedEventArts e)
{
    //code to perform when timer elapsed.
}

Edit2:另一件需要注意的事情是,根據經過的事件處理程序的執行時間,如果執行代碼所需的時間大於 1 秒,那么我建議您將_chatTimer.AutoReset設置為 false 並且僅在上一個經過的事件已經結束。 例如檢查這個

暫無
暫無

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

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