Prdita di reference con il Multithreading

giovedì 23 aprile 2009 - 13.57

Leonida Profilo | Junior Member

Ciao a tutti. Sto scrivendo un software che lancia in multithreading un insieme di controller. Il problema è che nonostante memorizzo in un attributo il reference al thread creato, mi da un valore null quando cerco di leggere questo referencedal metodo eseguito dal thread. Posto una porzione di codice:

...

protected virtual void AvviaThread()
{
Stato = true; // imposta il controller sullo stato attivo

if (ThreadAttivo == null) // se non è stato istanziato un oggetto Thread
this.threadAttivo = new Thread(new GateController().AutovetturaSuccessiva); // salva il reference al thread

ThreadAttivo.Start();

}

...

// Richiede l'autovettura successiva e la passa al varco
protected virtual void AutovetturaSuccessiva()
{
Boolean pedaggioPagato = false;

while (true)
{
Motorcar veicolo = new Motorcar(30, true, false, false);//GestoreDelTraffico.VarcoLibero(Varco, Varco.ID, Varco.Num); // RIPRISTINA

if (veicolo == null) // se la coda per il varco è vuota
SospendiThread();
else if ((veicolo != null) && (ThreadAttivo.ThreadState == ThreadState.Suspended)) // se il varco è in attesa di un'autovettura
RipristinaThread();

if (ThreadAttivo.ThreadState == ThreadState.Running) // se il thread è attivo e non sospeso
{
pedaggioPagato = Varco.AutovetturaSuccessiva(veicolo); // passa l'autovettura al varco

if (pedaggioPagato == true) // se il pedaggio è stato pagato
BarraVarco.AlzaBarra(veicolo.TempoAttraversamento); // alza la barra e attendi l'attraversamento del varco
}
}
}

Mi solleva chiaramente un errore di riferimento null al primo riferimento a ThreadAttivo. Potete aiutarmi? Premetto che non ho mai lavorato con i Thread.

gigi82 Profilo | Newbie

Prova a modificare questa istruzione:
this.threadAttivo = new Thread(new GateController().AutovetturaSuccessiva);
in:
this.threadAttivo = new Thread(GateController.AutovetturaSuccessiva);

Comunque puoi trovare un esempio sui thread qui:
http://msdn.microsoft.com/it-it/library/7a2f3ay4(VS.80).aspx

Ciao!

Leonida Profilo | Junior Member

Ciao, grazie per l'aiuto, così funziona
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