Wie, um eine Funktion auszuführen, die auf einem hintergrund-thread für Windows Phone 7?

Ich bin mit MVVM-Light zu bauen, ein WP7 (Windows Phone 7) Anwendung. Ich wünschte, um all die arbeiten durchgeführt, die durch das Modell ausgeführt werden, auf einem hintergrund-thread. Dann, wenn die Arbeit getan ist, ein Ereignis auslösen, so dass die ViewModel kann die Daten verarbeiten.

Habe ich bereits herausgefunden, dass ich nicht einen Delegaten aufrufen, die asynchron von einer WP7 app.

Derzeit bin ich versuchen, mit ThreadPool.QueueUserWorkItem() zum ausführen von code auf einem hintergrund-thread und die Verwendung von MVVM Light DispatcherHelper.CheckBeginInvodeOnUI() zum auslösen eines Ereignisses im UI-thread, um zu signalisieren, das ViewModel, dass die Daten geladen wurden (dieses stürzt ab VS2010 und Blend 4, wenn Sie versuchen, anzeigen einer design-time-Ansicht).

Gibt es eine Beispiel-code zum ausführen von code auf einem hintergrund-thread und dann der Versand ein Ereignis zurück an den UI-thread für eine WP7 app?

Vielen Dank im Voraus,
Jeff.

Bearbeiten - Hier ein Beispiel-Modell

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....
    }
}

InformationsquelleAutor der Frage Jeff R | 2010-07-20

Schreibe einen Kommentar