Обработка фоновых событий в главном потоке - PullRequest
1 голос
/ 03 августа 2011

Я новичок в C #, поэтому со мной все в порядке.Я создаю фоновый поток, чтобы выполнить некоторую работу, и в самом конце я вызываю метод ThreadDone(threadWorkResult), который вызывает событие.В настоящее время обработчик событий выполняется в том же фоновом потоке, но я бы хотел, чтобы он выполнялся в основном потоке пользовательского интерфейса (приложение Forms).Я искал в Интернете и нашел кое-что об использовании атрибутов здесь , но хотел бы знать, как это сделать программно.Есть ли способ сделать это вне тела самого обработчика?

Еще раз спасибо!

РЕДАКТИРОВАТЬ

Я посмотрел в BackgroundWorker, но янеобходимо создать несколько потоков одновременно, чтобы все соответствующие обработчики событий OnWorkerCompleted стали довольно грязными;что еще более важно, не все из них требуют завершенного события.В худшем случае я буду использовать несколько BackgroundWorkers, но можно ли мне просто вызвать метод (void aMethod()) из фонового потока и заставить его запускаться в основном потоке пользовательского интерфейса?

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

В элементах управления Windows Form существует метод с именем BeginInvoke, который будет выполнять код в потоке графического интерфейса.

0 голосов
/ 03 августа 2011

Я бы порекомендовал вам использовать поток BackgroundWorker для фоновой работы, а затем вы легко можете обработать пользовательский интерфейс в событии OnWorkerCompleted .

Посмотрите на мой ответ здесь для получения дополнительной информации.

Редактировать

Вы можете использовать делегата для передачи некоторых задач в поток MainUI.

public delegate void MyDelegate(object paramObject);

В фоновом режимевызовите его, как показано ниже.

private void aMethod(object myParam)
{
     if (InvokeRequired)
     {
         // We're not in the UI thread, so we need to call BeginInvoke
         BeginInvoke(new MyDelegate(aMethod), new object());
         return;
      }

      // Must be on the UI thread if we've got this far.
      // Do UI updates here.      
}

См. здесь и здесь для ссылок.

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