Problema background worker

giovedì 11 dicembre 2008 - 23.06

Renovatio Profilo | Newbie

/**
Scusate se ho postato due volte lo stesso thread ma ho avuto dei problemi di connessione e non sono riuscito a verificare se il thread fosse stato già aperto
*/
Ciao a tutti!
Premetto che non sono un grande esperto del c#, quindi mi scuso preventivamente se il problema che propongo risulterà banale. Sto sviluppando un'applicazione grafica in cui uso un background worker (classe BackgroundWorker) per eseguire un compito senza bloccare l'interfaccia. Alla fine del compito del worker, quello che ottengo è un oggetto (una collezione di file) che vorrei assegnare ad una variabile di istanza della classe che crea il background worker. Tuttavia, tale variabile viene inizializzata a null, quindi viene correttamente aggiornata con l'oggetto creato dal worker. Quando però si esce dal delegate RunWorkerCompleted la variabile ritorna null.

Il codice è il seguente:

class MediaLibraryManager
{
MediaLibrary<MediaItem> library;
BackgroundWorker worker;
public event EventHandler<LoadCompleteEventArgs> LoadCompleteEvent;
...
public void LoadMediaLibrary()
{
worker = new BackgroundWorker()
{
WorkerReportsProgress = true
};
worker.DoWork += delegate(object s, DoWorkEventArgs args)
{
MediaLibrary<MediaItem> temp_library = bridge.Load();
...
args.Result = temp_library;
};
worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args)
{
//Aggiorno la variabile di istanza library
library = args.Result as MediaLibrary<MediaItem>;
LoadCompleteEventArgs complete_args = new LoadCompleteEventArgs();
if (LoadCompleteEvent != null)
{
LoadCompleteEvent(this, complete_args);
}
};
worker.RunWorkerAsync();
}

public void CheckMediaLibrary()
{
//Qui library è null.
}

Se nell'applicazione chiamo LoadMediaLibrary, aspetto l'evento LoadCompleteEvent e quindi, quando l'evento viene riscontrato, invoco CheckMediaLibrary, in questo ultimo metodo (tramite debug) nodo che library è ridiventata null.
Non saprei da cosa può dipendere l'errore. Quello che ho notato è che se sostituisco al backgroundworker un thread "creato a mano" e associando agli eventi dei metodi da invocare non anonimi (me li definisco nella classe), allora library "non viene rimesso a null".

Grazie per l'aiuto!!!
Gabriele.
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