[C#] Come faccio per Ricevere un risultato da un altro Thread

giovedì 05 aprile 2012 - 13.44
Tag Elenco Tags  C#

w_t Profilo | Junior Member

Salve,
nel seguente codice che ho inserito,
vorrei ricevere la risposta di "OK" sul Metodo Start(), per gestire la condizione if(??? == "OK")

solo che devo riceverlo dal metodo Test() che si trova su di un altro Thread.....

come posso passare quella risposta ??


private void Start() { DataThread data = new DataThread("mario"); Thread t = new Thread(new ParameterizedThreadStart(Test)); t.Start(data); if(??? == "OK") { MessageBox.Show("Tutto OK!"); } } private void Test(object _data) { string nome = ((DataThread)_data).Nome; if (nome == "mario") { //Voglio comunicare a: Start() che è "OK" // // } } class DataThread { private string m_nome = ""; public DataThread(string _nome) { m_nome = _nome; } public string Nome { get { return m_nome; } set { m_nome = value; } } }

InsettoScoppiettato Profilo | Junior Member

Puoi mettere una variabile statica bool nella classe più alta che hai (Program?!) che inizializzi a false nel main. (in realtà sarebbe melgio costruire un enum a parte da usare al posto di bool in modo che tale variabile sia Unknown all'nizio, e true o false a seconda delle esigenze), qualcosa del tipo:

static class program { //Global members public TripleState boxReturn; ... [STAThread] static void Main() { Program.boxReturn = TripleState.Unknown; } } public enum TripleState { Unknown =-1, False = 0, True = 1 }
poi al tuo if puoi gestire tale variabile:

if (nome == "mario") { //Voglio comunicare a: Start() che è "OK" Program.boxReturn = TripleState.True; }

nella chiamata a questo metodo esegui puoi un Join() sul processo per attendere che finisca e a quel punto sei sicuro che la variabile globase sia già stata cambiata dal processo figlio.
Qualcosa tipo

t.Start(data); t.Join(); if(??? == "OK") { MessageBox.Show("Tutto OK!"); }
Spero che funzioni....

ciao

Alessandro Parma
Programmazione multipla scoposta con prognosi ancora da definirsi
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