c#聊天窗口应用程序的计时器问题

本文关键字:计时器 问题 应用程序 聊天 窗口 | 更新日期: 2023-09-27 18:02:19

我正在开发聊天应用程序。为了获得频繁到来的请求,消息和区域请求,我使用一个计时器并在timer.now上调用所有方法。问题是,每当我点击应用程序中的任何控件时,由于计时器正在运行,这会给我一个延迟的响应。它首先挂起,直到完成计时器代码,然后control click event为fire。

所以,任何关于如何处理这个的帮助是赞赏的,我也尝试过线程,但这没有帮助。

如果你有什么建议,请告诉我。

谢谢。

c#聊天窗口应用程序的计时器问题

使用System.Timers.Timer或System.Threading.Timer代替Windows.Windows.Forms.Timer,并且在Elapced事件处理程序中,无论何时调用UI控件上的方法或属性都使用control.InvokeRequiredcontrol.Invoke

表单计时器的问题是,它执行的动作在UI线程,从msdn:

Windows定时器是为单线程环境设计的线程用于执行处理

编辑:下面是使用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,并且仅在前一个经过的事件完成后启动计时器。例如: