Salve gente, vorrei proporvi un quesito che mi sono trovato davanti in questi giorni: sto costruento un'applicazione con tre form, un pricipale e due secondari.
I form secondari vengono creati da due thread diversi, diversi anche dal thread del form principale. Tutti i form tuttavia condividono uno stesso oggetto (chiamiamolo MyObject) e tutti e tre sono registrati a degli eventi di questo oggetto (viene creato nel form principale e poi viene passato un riferimento negli altri form al momento della loro visualizzazione).

Per i due thread secondari ho impostato la proprietà IsBackground a true, in modo che alla chiusura del thread principale si chiudessero anche gli altri.

Ho dovuto attuare questa tecnica per mantenere il form principale sempre attivo anche in caso di visualizzazione di una messagebox nei form secondari.

In pratica quello che succede è questo:

MyObject spara uno degli eventi al quale sono registrati i form, tutti e tre aperti. In questa fase il form principale deve ignorare l'evento, mentre gli altri form devono fare qualcosa.

Il problema è questo: i form rispondono correttamente all'evento, anche se nei form secondari ho dovuto utilizzare form.Invoke per poter effettuare le modifiche sui form, inoltre, l'evento apre una messagebox su uno dei due form secondari, sempre tramite la stessa invoke, ed il risultato è che tutti i form sono bloccati in attesa che venga premuto il bottone sulla messagebox.

Se invece la messagebox viene aperta da un bottone su uno dei due form secondari, tutto funziona correttamente: l'unico form bloccato è quello che ha lanciato la messagebox, gli altri continuano a funzionare correttamente.

In pratica, è come se fosse il thread principalel che scatena l'evento e visualizza la messagebox, nonostante abbia utilizzato il form.Invoke. Questo comportamento mi risulta molto strano.

Qualcuno può aiutarmi a risolvere il problema?

Grazie in anticipo....

Mep