C # BackgroundWorker вопрос - PullRequest
       15

C # BackgroundWorker вопрос

1 голос
/ 11 февраля 2010

У меня есть метод, который работает асинхронно с помощью BackgroundWorker. В рамках этого метода некоторый код зацикливается бесконечно с интервалом 1000 мс.

В этом коде, в зависимости от некоторого значения, отправляется событие. Насколько я понял, это событие выполняется в том же потоке, что и код, из которого оно было создано.

Но я хочу, чтобы это событие выполнялось в том же потоке, что и объект, который содержит BackgroundWorker. Как мне этого добиться?

Ответы [ 4 ]

4 голосов
/ 11 февраля 2010

Было бы лучше использовать Timer для планирования повторяющихся событий. Если это приложение Windows Forms (которое я предполагаю, поскольку вы хотите запустить его в контексте «собственного» потока), вам следует использовать System.Windows.Forms.Timer экземпляр.

2 голосов
/ 11 февраля 2010

В зависимости от вашего домена и приложения вы можете использовать событие ProgressChanged (и метод ReportProgress), которое запускается в нужном вам потоке.

0 голосов
/ 11 февраля 2010

Возможно, вам придется взглянуть на System.Threading.SynchronizationContext, который можно использовать для публикации событий обратно в держатель BackgroundWorker.

0 голосов
/ 11 февраля 2010

Является ли ваш «принимающий» поток потоком GUI? Если это так, то посмотрите на Control.Invoke () или Control.BeginInvoke (). Предполагая, что именно ваша форма или какой-то элемент управления в вашей форме обрабатывает это периодическое событие, вы сможете это сделать.

...