21/08/14 10:07
NetProgrammer
Buongiorno, Vi scrivo perchè non riesco a risolvere il seguente problema.
Sto scrivendo un'applicazione in C# che fa uso di threads. La struttura è la seguente:
Ho un Windows Form con un datagrid vuoto, dal thread del form avvio un thread secondario(uno o più che ha il compito di aggiornare il datagrid.
Da quello che ho studiato ho capito che devo creare un delegato per permettere al thread di agire sul controllo del main thread in maniera sicura.
Ecco quello che ho fatto io:
Codice del delegato nel widows form
Il codice del thread risiede in una classe separata(GlobalItems) che richiamo in questa maniera dal form principale alla pressione di un bottone:
Ora dal thread quando devo modificare il datagrid lo faccio in questa maniera:
Debuggando l'applicazione ho notato che InvokeRequired è sempre false e quindi il datagrid non viene aggiornato.
Non riesco a capire dove sbaglio.
In attesa di una Vostra gentile risposta,
distinti saluti.
Sto scrivendo un'applicazione in C# che fa uso di threads. La struttura è la seguente:
Ho un Windows Form con un datagrid vuoto, dal thread del form avvio un thread secondario(uno o più che ha il compito di aggiornare il datagrid.
Da quello che ho studiato ho capito che devo creare un delegato per permettere al thread di agire sul controllo del main thread in maniera sicura.
Ecco quello che ho fatto io:
Codice del delegato nel widows form
public delegate void updateGridHandler(DataTable dt); public void updateGrid(DataTable dt) { if (this.dataGridView1.InvokeRequired) this.dataGridView1.Invoke(new updateGridHandler(updateGrid), dt); else this.dataGridView1.DataSource = dt; }
Il codice del thread risiede in una classe separata(GlobalItems) che richiamo in questa maniera dal form principale alla pressione di un bottone:
GlobalItems.t = new Thread(new ThreadStart(GlobalItems.tester)); GlobalItems.t.Start();
Ora dal thread quando devo modificare il datagrid lo faccio in questa maniera:
if (...) { MainForm mf = new MainForm(); mf.updateGrid(dt); //dt=datatable con i dati aggiunti dal thread }
Debuggando l'applicazione ho notato che InvokeRequired è sempre false e quindi il datagrid non viene aggiornato.
Non riesco a capire dove sbaglio.
In attesa di una Vostra gentile risposta,
distinti saluti.
Ultima modifica effettuata da NetProgrammer 21/08/14 10:10
aaa