2012-05-05 17 views
0
public class SyncHelper 
{ 
    private LiveConnectClient client; 
    public event EventHandler SyncStarted; 
    public event EventHandler SyncCompleted; 

    public SyncHelper(LiveConnectClient client) 
    { 
     this.client = client; 
    } 

    public void TrySync() 
    { 
     Debug.WriteLine("Beginning sync"); 
     OnSyncStarted(); 
     client.GetCompleted += OnGetCompleted; 
     client.GetAsync("me/skydrive/files"); 
    } 

    private void OnGetCompleted(object sender, LiveOperationCompletedEventArgs e) 
    { 
     Thread.Sleep(10000); 
     Debug.WriteLine("Get Completed"); 
     client.GetCompleted -= OnGetCompleted; 
     OnSyncCompleted(); 
     Debug.WriteLine("Sync completed"); 
    } 

    private void OnSyncStarted() 
    { 
     if (SyncStarted != null) 
      SyncStarted(this, new EventArgs()); 
    } 

    private void OnSyncCompleted() 
    { 
     if (SyncCompleted != null) 
      SyncCompleted(this, new EventArgs()); 
    } 
} 

関数OnGetCompletedがUIスレッドで呼び出されており、UIが応答しません。私が知っているところでは、これらのコールバックは別のスレッドで動作すると思っていたので、それをUIスレッドにポストするためには、ディスプレーチャを使用する必要がありました。何かご意見は?助けて!Live SDK Windows Phone 7 UIスレッドのGetCompletedコールバック?

答えて

1

GetAsyncコールはバックグラウンドスレッドを使用して実際のフェッチを実行する可能性が高いですが、元のスレッドコンテキストでCompletedコールバックを呼び出してディスパッチャを使用する必要はありません。

なぜあなたは睡眠(10000)を入力していますか?コールバックには「ねえ、やったよ」と書かれています。その時点で、必要に応じてUIを更新する必要があります。処理に時間がかかる場合は、バックグラウンドスレッド、スレッドプールタスクを生成するか、別のコールバックで別の非同期呼び出しを使用してください。

関連する問題