2009-11-10 5 views

Antwort

15

this explanation See.

SynchronizationContext.Current wird nur im Hauptthread gesetzt (das ist der einzige Thread ist, wo man eigentlich gar nicht benötigen)

Die Blog-Post schlägt eine Abhilfe.

+0

Nizza Abhilfe! – psulek

18

Um es zum Laufen zu bringen.

In Ihrer Klasse

private SynchronizationContext synchronizationContext; 

Im UI-Thread (Hauptthread)

synchronizationContext = System.Threading.SynchronizationContext.Current; 

Im Arbeitsthread

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

Wie wird der syncronizationContext in den Worker-Thread instanziiert oder an diesen übergeben? – Tim

+0

Nehmen wir an, Sie verwenden einen 'BackgroundWorker' in Ihrem Formular. Wenn Sie 'SynchronizationContext.Current' in Ihrem Konstruktor speichern oder das Ereignis als Variable auf Klassenebene laden, können Sie auf den' RunWorkerCompleted' -Handler zugreifen. Wenn Sie die Arbeit in einer anderen Klasse wie einem Moderator ausführen, können Sie den Präsentator im UI-Thread erstellen und den Kontext im Konstruktor speichern. –

Verwandte Themen