我正在开发一个聊天应用程序。为了获得frequetly提交请求,消息和区域请求我正在使用一个计时器并调用timer.now上的所有方法。问题是,当我点击应用程序中的任何控件时,由于计时器运行,这给了我一个迟到的响应。它首先挂起,直到它完成定时器代码然后控制点击事件为火。
所以,对于如何处理这个问题的任何帮助表示赞赏,我也尝试过线程,但这没有帮助。
如果你有,请告诉我。
感谢。
答案 0 :(得分:3)
使用System.Timers.Timer或System.Threading.Timer代替Windows.Windows.Forms.Timer
,并在Elapced
事件处理程序内部,只要在UI控件上调用方法或属性,就使用control.InvokeRequired
和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秒,那么我建议你设置{{ 1}}为false,仅在上一次经过的事件结束后启动计时器。例如,检查this。