Передача сообщения в другой поток в C # - PullRequest
1 голос
/ 26 августа 2009

У меня поток работает в фоновом режиме. Как мне отправить ему сообщения из моей главной ветки? Единственное сообщение, которое мне нужно отправить, это 'go' / 'wakeup'

Ответы [ 4 ]

3 голосов
/ 26 августа 2009

Если ваш поток ничего не делает, пока вы не хотите его запустить, то зачем запускать его, пока вы не хотите, чтобы он продолжал?

Если вы хотите запустить фоновый поток, затем приостановить / подождать какое-то событие, а затем продолжить, простой метод - использовать семейство классов EventWaitHandle.

Простой пример (взят из этого вопроса ). Оба потока должны иметь доступ к следующему:

private ManualResetEvent _workerWait = new ManualResetEvent(false);

Тогда в вашей рабочей ветке:

_workerWait.WaitOne();

Теперь он будет блокироваться, пока ваш основной поток не вызовет:

_workerWait.Set()

Для более полного обсуждения ваших вариантов и некоторых примеров, см .: http://www.albahari.com/threading/

2 голосов
/ 26 августа 2009

использование AutoresetEvent или ManualResetEvent

1 голос
/ 26 августа 2009

Если вы говорите о пробуждении спящего потока - Thread.Suspend () (wait) - Thread.Resume () (go / wake up)

0 голосов
/ 26 августа 2009

Используйте класс System.Threading.Semaphore .

...