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());
    }
}

正在 UI 线程中调用 OnGetCompleted 函数,并且 UI 无响应。据我所知,我认为这些回调将在不同的线程中工作,我们必须使用调度程序将其发布到 UI 线程。有什么想法吗?帮助!

4

1 回答 1

1

GetAsync调用可能使用后台线程进行实际提取,但随后它试图通过在原始线程上下文中调用 Completed 回调来帮助您,因此您不必使用 Dispatcher。

你为什么要进入睡眠(10000)呢?回调说“嘿,我完成了”。此时,您应该根据需要更新 UI。如果您需要进行需要大量时间的进一步处理,请生成后台线程、线程池任务或使用另一个异步调用和另一个回调。

于 2012-05-06T14:14:30.773 回答