Как заставить определенный поток иметь дело с событием (не делать с проблемами потоков пользовательского интерфейса)? - PullRequest
1 голос
/ 13 ноября 2009

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

Я пытаюсь, чтобы определенный поток имел дело с событием (кроме потока, который инициирует событие), но я не хочу, чтобы поток пользовательского интерфейса обрабатывал его. Чтобы быть ясным, я не ищу это сделать:

private void UpdateFromNewFrame(WindowFrame frame) {

    if (InvokeRequired) {
         BeginInvoke(new WindowUpdateHandler(UpdateFromNewFrame), new object[] { frame });
         return;
    }

    Text = frame.Title;
}

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

Можно ли даже вызывать поток или я должен создавать новый поток в приемнике событий, или есть какой-то способ, чтобы все прослушиватели событий вызывались в отдельных (автоматически создаваемых) потоках?

1 Ответ

1 голос
/ 13 ноября 2009

Поток не-пользовательского интерфейса должен иметь какой-то цикл обработки сообщений, так же как и поток пользовательского интерфейса. Он будет ждать получения элементов для обработки и соответственно обрабатывать их. Это довольно легко сделать с очередью производителя / потребителя, но было бы проще либо создать новый поток, либо использовать пул потоков.

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