Threading.Thread....

mercoledì 19 gennaio 2005 - 10.37

LeonDom Profilo | Senior Member

Come posso passare un parametro ad un thread???

Mi spiego faccio partire una serie di Thread che fanno operazioni piuttosto pesanti all'apertura di un determinato form.
Li vorrei lanciare a catena uno dopo l'altro, o meglio vorrei farlo :( , ma non so come passare un parametro che è necessario ad una Sub.
La necessità di lanciare thread(3) è perché devo recuperare molti record e vorrei che l'utente nel frattempo potesse fare anche altro...

il mio thread è questo:

Dim Thr_Special As New Threading.Thread(AddressOf Me.Special(id_tabSpecial))

Mi sottolinea il Me.Special(id_tabSpecial) generando l'errore...

Chiedo venia per l'italiano...

Grazie,
LeonDom

LeonDom Profilo | Senior Member

Nessuno mi dice se si può fare questa cosa?

LeonDom

Brainkiller Profilo | Guru

Ciao,
una delle domande più famose :)
Io di solito procedo così. Visto che al Thread passi un metodo di un'istanza di una nuova classe, io nella classe creo un parametro apposito che crei e valorizzo prima di lanciare il thread.

Oppure se la funzione che passi al thread è contenuta sempre nella stesa classe allo stesso modo crei un campo private che contenga il parametro.

Nel Framework 2.0 mi pare abbiano risolto questo problema ostico di passaggi parametri al thread.

ciao
david

LeonDom Profilo | Senior Member

Spero di aver capito quello che intendi... questa serà proverò a fare questa cosa, se l'ho capita bene, e poi sicuramente :) domani tornerò a "tormentarti".
Se è famosa la domanda e nel Framework 2.0 hanno risolto questo problema non credo sia tanto facile fare questa cosa...
Seguirò comunque le tue indicazioni.

Grazie 1000,
LeonDom

LeonDom Profilo | Senior Member

Ciao David,
mentre provavo come mi hai consigliato tu ieri, mi è venuta in mente una cosa, se io dichiaro un dataset pubblico e alla fine di ogni thread lo aggiorno ottengo lo stesso risultato, poiché devo lanciarli a catena non dovrei avere problemi, ho provato e per il momento funziona. So che non è una soluzione ottimale ma almeno ho aggirato il problema.
Tento di fare quello che mi hai detto tu ora...

LeonDom

LeonDom Profilo | Senior Member

Ariecchomi David, ho fatto grossomodo come dicevi tu... ed ho capito quello che accade. Ora ho un'altra domanda:

Io gli paso un parametro, se volessi ritornare dei dati da quel thread che lancio???

Mi spiego ad esempio gli lancio come parametro un integer = 90 che è il numero id del dipendente, mi faccio nella funzione la mia bella ricerca ed alla fine ho un dataset con i dati di quel dipendente. Se volessi che la funzione che lancio mi ritorni questo dataset (sempre dal thread lanciato ovviamente)???
E' possibile una cosa del genere???
Ci sto provando ma non riesco...

Grazie ,
LeonDom

Brainkiller Profilo | Guru

Ti dicevo se riesci a far vedere al tuo thread una variabile interna al modulo non dovresti avere problemi.
Il problema nasce se hai una nuova classe, devi passare dei parametri, insomma è un po' un casino, non è come una Function da cui puoi ritornare semplicemente quello che vuoi.

Esempio se tu riesci ad assegnare al thread come parametro un array e lo modifiche, poi una volta terminato il thread l'array sarà modificato e lo potrai usare altrove.

Attenzione però alla condivisione delle risorse in particolare se hai l'accesso alla stessa risorsa da più threads.

ciao
david

LeonDom Profilo | Senior Member

David,
mi sono imbattuto in una cosa più grossa di me. Ho cercato info su MSDN e sembra che abbia trovato la soluzione, è una cosa parecchio tostarella(perlomeno per me).
Infatti non basta fare una Classe che prenda il parametro (che nel problema alla fine è la cosa più "semplice"), ma avendo bisogno di ritornare una quantità di dati mi sono imbattuto nel problema di ritorno degli stessi dati.
Ho dovuto creare un Evento che puntasse ad un'altra classe restituendo il parametro in output, nel mio caso un dataset.

Questa era solo una prova che volevo fare per avere delle migliorie nel mio programma, il problema ora è come dici tu, bisogna che stia attento a chi accede a quel Thread...

Ti ringrazio moltissimo,

LeonDom
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5