1

このチュートリアルを試して、WP7 アプリからスカイドライブに新しいフォルダーを作成します。

これが私のコードです:

    private void MSAccountLoginToggleSwitch_Checked_1(object sender, RoutedEventArgs e)
    {
        try
        {
            LiveAuthClient auth = new LiveAuthClient("** my id **");
            auth.LoginAsync(new string[] { "wl.skydrive_update", "wl.calendars_update" });
            auth.LoginCompleted += auth_LoginCompleted;
        }
        catch (LiveAuthException exception)
        {
            MessageBox.Show("Error signing in: " + exception.Message);
        }
    }

    private void auth_LoginCompleted(object sender, LoginCompletedEventArgs e)
    {
        if (e.Status == LiveConnectSessionStatus.Connected)
        {
            mySession = e.Session;
        }
        else
        {
            MSAccountLoginToggleSwitch.IsChecked = false;
        }
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        try
        {
            var folderData = new Dictionary<string, object>();
            folderData.Add("some test", "A brand new folder was created");

            LiveConnectClient liveClient = new LiveConnectClient(mySession);
            liveClient.PostAsync("me/skydrive", folderData);
        }
        catch (LiveConnectException exception)
        {
            MessageBox.Show("Error creating folder: " + exception.Message);
        }
        finally
        {
            MessageBox.Show("uploded");
        }
    }

「アップロード済み」というメッセージボックスが表示されますが、スカイドライブを見ると、そのファイルは作成されていません。

エラー メッセージは表示されません。

4

3 に答える 3

1

この行liveClient.PostAsync("me/skydrive", folderData);は、待つのではなく、最後に表示するだけの Task を提供しますMessageBox.Show("uploded");async/が WP7 でサポートされているとは思わないawaitため、ContinueWith メソッドで Task を処理する必要があります。

private void Button_Click_1(object sender, RoutedEventArgs e)
{
        var folderData = new Dictionary<string, object>();
        folderData.Add("some test", "A brand new folder was created");

        LiveConnectClient liveClient = new LiveConnectClient(mySession);
        liveClient.PostAsync("me/skydrive", folderData)
                  .ContinueWith((t) => 
                                 { 
                                    if (t.IsFauled)
                                    {
                                       MessageBox.Show("Error creating folder: " + t.Exception.Message);
                                    }
                                    else
                                    {
                                        MessageBox.Show("uploded");  
                                    }
                                 }
                                , TaskScheduler.FromCurrentSynchronizationContext());

}

更新: 上記のコードは WP8 でのみ機能しますが、WP7 では PostAsync は Task のメソッドではないため、PostAsync の結果を取得するには、PostCompletedイベントをサブスクライブする必要があります。

于 2013-04-08T22:45:37.243 に答える
1

私は行に間違いがある問題を見つけました:

folderData.Add("some test", "A brand new folder was created");

正しいバージョンは次のとおりです。

folderData.Add("name", "some test");
于 2013-04-09T09:57:58.630 に答える
0
   var folderData = new Dictionary<string,object>();
   folderData.Add("myfolder ","simple folder ");    
   client.PostAsync("me/skydrive","{'name': 'myfolder' }"); 

 client.PostCompleted += new EventHandler<LiveOperationCompletedEventArgs>          (client_PostCompleted);

   void client_PostCompleted(object sender, LiveOperationCompletedEventArgs e)
    {
        var a = e.RawResult;
    }
于 2013-10-01T11:06:24.450 に答える