c#聊天窗口应用程序的计时器问题
本文关键字:计时器 问题 应用程序 聊天 窗口 | 更新日期: 2023-09-27 18:02:19
我正在开发聊天应用程序。为了获得频繁到来的请求,消息和区域请求,我使用一个计时器并在timer.now上调用所有方法。问题是,每当我点击应用程序中的任何控件时,由于计时器正在运行,这会给我一个延迟的响应。它首先挂起,直到完成计时器代码,然后control click event为fire。
所以,任何关于如何处理这个的帮助是赞赏的,我也尝试过线程,但这没有帮助。
如果你有什么建议,请告诉我。
谢谢。
使用System.Timers.Timer或System.Threading.Timer代替Windows.Windows.Forms.Timer
,并且在Elapced
事件处理程序中,无论何时调用UI控件上的方法或属性都使用control.InvokeRequired
和control.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,并且仅在前一个经过的事件完成后启动计时器。例如: