2009-11-10 12 views

Odpowiedz

15

Zobacz this explanation.

SynchronizationContext.Current jest ustawiona tylko w głównym wątku (który jest tylko wątek, w którym w rzeczywistości nie jest to potrzebne)

Blog Post proponuje obejście.

+0

Nicea obejście! – psulek

18

Aby zmusić go do pracy.

W swojej klasie

private SynchronizationContext synchronizationContext; 

w wątku UI (główny wątek)

synchronizationContext = System.Threading.SynchronizationContext.Current; 

w wątku pracownika

synchronizationContext.Post( 
    state => DoUpdateInUIThread((Abc)state),  
    abc); 
+0

W jaki sposób syncronizationContext jest instancjonowany w wątku roboczym lub przekazywany do niego? – Tim

+0

Powiedzmy, że używasz 'BackgroundWorker' w twoim formularzu. Jeśli zapiszesz się 'SynchronizationContext.Current' w konstruktora lub obciążenia zdarzenia jako zmienną poziomu klasy, to będzie dostępne w' obsługi RunWorkerCompleted'. Ewentualnie, jeśli wykonujesz pracę w innej klasie, na przykład prezenter, możesz utworzyć prezentera w wątku UI i zapisać kontekst w konstruktorze. –

Powiązane problemy