Потоковая обработка событий (C #) - PullRequest
5 голосов
/ 24 августа 2009

У меня есть вопрос об обработке событий с помощью C #. Я слушаю события, которые бросает класс А. Теперь, когда событие выброшено, выполняется метод, который что-то делает. Этот метод иногда должен ждать ответов от источников данных или аналогичных.

Я думаю, что обработка событий происходит синхронно, поэтому одно за другим событие будет обрабатываться. Возможно ли сделать это асинхронным? Я имею в виду, что когда метод выполняется, но должен ждать ответа источника данных, может быть обработано другое событие?

Заранее спасибо

Себастьян

Ответы [ 2 ]

11 голосов
/ 24 августа 2009

Я предполагаю, что вы можете порождать код, который должен ждать в новом потоке. Это приведет к тому, что обработчик событий не будет блокировать поток, в котором возникают события, так что он может вызвать следующий обработчик событий в строке. (Образец C # 3.5)

private void MyPotentiallyLongRunningEventHandler(object sender, SomeEventArgs e)
{
    ThreadPool.QueueUserWorkItem((state) => {
        // do something that potentially takes time

        // do something to update state somewhere with the new data
    });
}
2 голосов
/ 24 августа 2009

Просто, создайте поток в вашем обработчике событий и выполните всю логику там. Лучше использовать пул потоков, чтобы число потоков было ограничено.

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