.net многопоточность? - PullRequest
       1

.net многопоточность?

0 голосов
/ 26 апреля 2011

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

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

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 26 апреля 2011

Это даже не относится к .NET. Многие пользовательские интерфейсы имеют сходство с потоками.

Существует много альтернатив использованию BackgroundWorker, включая Control.BeginInvoke для Windows Forms или Dispatcher для WPF или Silverlight.

Если вы используете .NET 4, вы также можете использовать TaskScheduler.FromCurrentSynchronizationContext для выполнения любого Task в контексте синхронизации потока пользовательского интерфейса.

1 голос
/ 26 апреля 2011

Управляемое событиями фонового работника не является дешевым хаком.

Однако, если вам все же нужно выполнить обновление самостоятельно, вам нужно использовать метод Control.Invoke, чтобы присоединиться к потоку пользовательского интерфейса.чтобы сделать обновление.

В конечном итоге вы засоряете свой код if (control.InvokeRequired) повсюду, и поэтому я бы посоветовал взглянуть на использование метода расширения, как подробно описано в другом посте:

Очистка кода, засоренного InvokeRequired

...