Thread con più parametri.

giovedì 04 febbraio 2010 - 12.51

Superpippo1980 Profilo | Junior Member

Buongiorno a tutti.

Sto trasferendo alcune form win dal VS 2003 al VS 2005.
Ho parecchie funzioni che utilizzano Thread e non mi è chiarissimo, nonostante abbia consultato l msdn, la chiamata a queste funzioni.

Quando ho una metodo senza parametri il gioco è fatto:

_T = new Thread(new System.Threading.ThreadStart(DoJob));
this._T.Start();
}
private void DoJob()
{ .....
}


ma il problema è quando la funzione DoJob prende 3 parametri:
private void DoJob(int cardine, bool settore, cl_Cliente cliente)
{ .....
}


Ho letto che devo utiizzare delegati e/o utilizzare System.Threading.ParameterizedThreadStart...ma la cosa non mi è chiarissima.

Grazie.







tonyexpo Profilo | Senior Member

ciao


dal .NET 2 in poi i thread accettano nessuno o 1 parametro di tipo object (e solo object)

quindi, se vuoi puoi passare quanti parametri vuoi con una classe appositamente creata:


class parameter {
public string Prop1, Prop2, Prop3;
}

var t = new Thread(workerSub);
t.Start(new parameter {Prop1=1, Prop2=2, Prop3=3});



e avrai una sub del tipo:


private void workerSub(object o)
{
parameter p = o as parameter;
var p1 = p.Prop1;
...
}



se hai ancora dubbi scrivi pure
ciao

Antonio Esposito
MCTS, MCP

http://blogs.dotnethell.it/espositos

Superpippo1980 Profilo | Junior Member

Perfetto!!
Ottimo.
Ho iniziato a vedere un po' di luce...grazie al tuo consiglio ho anche visto che potevo anche usare la new System.Threading.ParameterizedThreadStart..

e quindi:
quindi la funzione dojob deve accettare 1 paramentro, il param deve essere un object e la funzione deve essere void.

public void CHIAMATA()
{
cl_prova p = new cl_prova();
p.Conta =5;
p.Conteggia=true;

Thread T = new Thread(new System.Threading.ParameterizedThreadStart(DoJob));
T.Start(p);
}

public void DoJob(object P)
{
cl_prova p = (cl_prova)P;
.....
}



Ora la mia domanda è:
io voglio fare 1 thread che mi riempia una listView..
vorrei capire come fare le chiamate in2 modi:
1) é il thread che rimpie la ListViews ( non posso passare come parametro al thread La ListView del Main)???
2) il thread mi restituisce un ArrayList di item che poi il Main andrà a caricare..... ( ma la funaiozne deve essere void...quindi come faccio a farmirestituire un ArrayList)


Grazie

tonyexpo Profilo | Senior Member

Ciao


il multithreading puo interagire con i controlli di un form solo utilizzando una specifica sintassi:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


alternativamente puoi usare un componente appositamente creato per il multithreading in un contesto windows forms:
aggiungi un BackgroundWorker al form dalla toolba
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


nel tuo caso, il this.Text = <qualcosa>; diventerà il popolamento del o dei controlli che vorrai


ciao

Antonio Esposito
MCTS, MCP

http://blogs.dotnethell.it/espositos

Superpippo1980 Profilo | Junior Member

Ok grazie. ci provo e vi faccio sapere..
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