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

时间:2011-07-18 12:53:36

标签: c# chat

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

所以,对于如何处理这个问题的任何帮助表示赞赏,我也尝试过线程,但这没有帮助。

如果你有,请告诉我。

感谢。

1 个答案:

答案 0 :(得分:3)

使用System.Timers.TimerSystem.Threading.Timer代替Windows.Windows.Forms.Timer,并在Elapced事件处理程序内部,只要在UI控件上调用方法或属性,就使用control.InvokeRequiredcontrol.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