So che se sto modificando un controllo da un thread diverso, dovrei fare attenzione perché WinForms e WPF non consentono di modificare lo stato del controllo da altri thread.Perché solo il thread dell'interfaccia utente è autorizzato a modificare l'interfaccia utente?
Perché è presente questa restrizione?
Se riesco a scrivere codice thread-safe, dovrei essere in grado di modificare lo stato del controllo in modo sicuro. Allora perché questa restrizione è presente?
Credo che una delle ragioni per cui esiste questa limitazione sia che non ci sia sempre né più né meno di un thread garantito per ascoltare il ciclo dei messaggi di Windows. –
@Tim: non è giusto, possono esistere più thread dell'interfaccia utente, ognuno con il proprio loop di messaggi. Ad esempio, è possibile ruotare un secondo thread per visualizzare una finestra di dialogo della barra di avanzamento. –
@ Ben: questo post è contrassegnato con C#. In un'applicazione .Net, è necessario sempre eseguire il marshalling del controllo sul thread della GUI per eseguire il lavoro relativo al disegno (o comportare un comportamento erratico o un'eccezione). Naturalmente, ciò non impedisce di generare un numero qualsiasi di thread per eseguire operazioni di background. Per quanto riguarda l'ascolto degli effettivi messaggi Win32 in arrivo, l'unico modo che conosco per farlo (a parte una chiamata esterna) è con "protected override void WndProc (ref Message m)". In teoria, potrebbe prendere i messaggi passati a questo metodo e usarli su qualsiasi thread. –