c # окно приложения проблемы с таймером - PullRequest
0 голосов
/ 18 июля 2011

Я разрабатываю приложение для чата. Для получения свободно поступающего запроса, сообщений и запроса зоны я использую один таймер и вызываю все методы на timer.now. Проблема в том, что когда я нажимаю на любой элемент управления в приложении, это дает мне поздний ответ из-за работы таймера. Сначала он зависает до тех пор, пока не завершит код таймера, а затем событие управления щелчком срабатывает.

Итак, любая помощь в том, как справиться с этим, приветствуется, я также пробовал создавать потоки, но это не помогло.

Пожалуйста, дайте мне любую идею, если у вас есть.

Спасибо.

1 Ответ

3 голосов
/ 18 июля 2011

Используйте System.Timers.Timer или System.Threading.Timer вместо Windows.Windows.Forms.Timer и внутри обработчика событий Elapced при каждом вызове методов или свойств в пользовательском интерфейсе.элементы управления используют control.InvokeRequired и control.Invoke.

проблема с таймером формы заключается в том, что он выполняет действие в потоке пользовательского интерфейса, начиная с 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 значениеложь и запуск таймера только после завершения предыдущего истекшего события.например, проверьте это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...