Apertura di due form in tread concorrenti

mercoledì 24 agosto 2011 - 16.08

dompa72 Profilo | Senior Member

Sono un po confuso....
Ho due form MDI, che apre due volte la stessa windows form ma in due thread diversi, queste due windows form rispondono in modo concorrenziale??

Grazie

u235 Profilo | Junior Member

ciao, credo che le due form siamo comunque (a livello interno) eseguite su due thread differenti, quindi in teoria se hanno una risorsa condivisa si.

dompa72 Profilo | Senior Member

Grazie per la risposta
Come posso a far rispondere le due form contemporaneamente??

u235 Profilo | Junior Member

dipende da cosa devi fare.

freeteo Profilo | Guru

Ciao,
le 2 form sono cmq 2 oggetti in memoria, quindi o ti tieni in qualche collection, la form quando la crei (ma se poi sono in 2 thread diversi potresti dover gestire anche problemi di accesso a qualche risorsa, come ad esempio un file su disco...) oppure puoi fare in modo che le form si sottoscrivano ad un evento di una terza classe, la quale funga da "Pilota".

Ossia è la classe che scatena l'evento e di conseguenza le 2 form (ma a questo punto anche "n" form, non ti interessa più quante siano...) vengono avvertite dell'evento ed eseguono il loro codice (che appunto è uguale dato che la classe è la stessa, ma hanno solamente una diversa istanza in memoria).

Forse la spiegazione è più complessa di farti un esempio:
class Pilota { public static event EventHandler EseguiAdesso; ..... decidi quando scatenare quell'evento ..... } class FormDelProgetto : Form { .... public FormDelProgetto() { Pilota.EseguiAdesso += (o,e) => { ...fai quello che devi fare... }; } }
come vedi la classe Pilota, è quella a cui sono agganciate tutte le istanze della form, quindi se scatena l'evento (magari secondo un timer, oppure arriva da un altro pezzo di codice) le form fanno quello che devono fare.

Qualcosa di questo genere.

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

u235 Profilo | Junior Member

@dompa72
non è chiaro a cosa e come devono rispondere, in ogni caso, sia se mantieni una collection, sia se usi eventi comuni, oppure se usi un semplice "foreach (Form1 f in Application.OpenForms.OfType<Form1>())" che ti formisce tutti i form del tuo tipo che sono aperti di tutta l'applicazione (e poi nel tuo codice li fai fare quello che vuoi), non sarà esattamente simultanea l'esecuzione. Discorso diverso se invece la modifica nasce simultaneamente dai form, solo in questo caso potrebbe essere simultanea. Per esempio, se dentro ai tuoi form c'è una modifica ad un file scaturita allo scoccare della stessa ora, allora entrambi tenteranno di eseguire la modifica simultaneamente.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5