Utilizzo MVVM Light per creare un'applicazione WP7 (Windows Phone 7). Desidero che tutto il lavoro eseguito dal modello sia eseguito su un thread in background. Quindi, quando il lavoro è terminato, genera un evento in modo che ViewModel possa elaborare i dati.Come eseguire una funzione su un thread in background per Windows Phone 7?
Ho già scoperto che non posso richiamare un delegato in modo asincrono da un'app WP7.
Attualmente sto cercando di utilizzare ThreadPool.QueueUserWorkItem() per eseguire codice su un thread in background e utilizzare DispatcherHelper.CheckBeginInvodeOnUI() di MVVM Light per generare un evento sul thread dell'interfaccia utente per segnalare a ViewModel che i dati sono stati caricati (questo blocca VS2010 e Blend 4 quando provano a visualizzare una vista in fase di progettazione).
Esiste un codice di esempio per eseguire codice su un thread in background e quindi inviare nuovamente un evento al thread dell'interfaccia utente per un'app WP7?
Grazie in anticipo, Jeff.
Edit - Ecco un modello di esempio
public class DataModel
{
public event EventHandler<DataLoadingEventArgs> DataLoadingComplete;
public event EventHandler<DataLoadingErrorEventArgs> DataLoadingError;
List<Data> _dataCasch = new List<Data>();
public void GetData()
{
ThreadPool.QueueUserWorkItem(func =>
{
try
{
LoadData();
if (DataLoadingComplete != null)
{
//Dispatch complete event back to the UI thread
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
//raise event
DataLoadingComplete(this, new DataLoadingEventArgs(_dataCasch));
});
}
}
catch (Exception ex)
{
if (DataLoadingError != null)
{
//Dispatch error event back to the UI thread
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
//raise error
DataLoadingError(this, new DataLoadingErrorEventArgs(ex));
});
}
}
});
}
private void LoadData()
{
//Do work to load data....
}
}
Non dimenticarti di ricontrollare le implicazioni sulle prestazioni di utilizzare barre di avanzamento indeterminate: http://www.jeff.wilcox.name/2010/08/progressbarperftips2/ –
imposta definitivamente IsDeterminte = False quando non sono visibili. – Micah
La fonte di SafeDispatch sarebbe carina. – Sam