Ho un thread principale dell'interfaccia utente che esegue l'applicazione e crea il modulo della finestra principale (chiamiamolo W
). Ho anche un thread secondario che faccio girare e che crea una finestra di dialogo (chiamiamola B
).Eccezione cross-thread quando si imposta il proprietario di WinForms.Form: come fare nel modo giusto?
Desidero impostare il proprietario della finestra di dialogo B
come finestra principale W
. L'impostazione del proprietario di B
s avviene sul thread che ha creato B
. In sostanza:
b.Owner = w;
ma questo genera un'eccezione cross-thread a dirmi che sto tryng per accedere all'oggetto W
dal thread sbagliato.
Così ho provato a eseguire il codice sul thread principale dell'interfaccia utente, utilizzando uno Control.Invoke
su W
. Ma poi, ottengo lo stesso errore che mi dice che sto cercando di accesso B
dal thread sbagliato:
System.InvalidOperationException was unhandled by user code
Message=Cross-thread operation not valid: Control 'B' accessed from a
thread other than the thread it was created on.
Source=System.Windows.Forms
Come faccio a farlo bene?
Non utilizzare moduli su più thread. Ti darà più problemi di quanti ne valga. – SLaks
Hai letto questo post SO: http://stackoverflow.com/questions/3046245/whats-wrong-with-my-cross-thread-call-in-windows-forms? Se questo non ti aiuta, devi pubblicare il codice che ti dà l'errore. –
Forse puoi dirci quali caratteristiche di proprietà speravi di sfruttare (si spera non tutte) e potremmo suggerire modi per ottenere effetti simili? –