0

SharpBox 1.2 を使用して、以下のコードで認証します。

private async void toDropBoxBtn_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
      config = CloudStorage.GetCloudConfigurationEasy(nSupportedCloudConfigurations.DropBox) as DropBoxConfiguration;
      DropBoxRequestToken requestToken = DropBoxStorageProviderTools.GetDropBoxRequestToken(config, "7nu03leznnz6x74", "ex3gge8av7kp9lq");
      //it hangs at the line above ^ (requestToken)
      String AuthorizationUrl = DropBoxStorageProviderTools.GetDropBoxAuthorizationUrl(config, requestToken);
      ICloudStorageAccessToken accessToken = DropBoxStorageProviderTools.ExchangeDropBoxRequestTokenIntoAccessToken(config, "7nu03leznnz6x74", "ex3gge8av7kp9lq", requestToken);
    }

ここのドキュメントを見ると、

SharpBox ライブラリには、多くの操作のための同期関数と非同期関数の両方があります。どちらの形式もデスクトップでの使用に役立ちますが、これらの呼び出しは実行中の UI スレッドをブロックし、アプリケーション全体をブロックするため、同期バージョンを Windows Phone アプリで直接使用することはできません。

非同期関数は UI スレッドで使用できます。必要な関数が同期バリアントにのみ存在する場合、これらを別の (非 UI) スレッドで実行し、コールバックを使用して結果を返すことができます。

それが私のコード ハングの問題のようです。そのため、このrequestToken行を処理する新しいスレッドを作成することにしました。私が見つけた提案のほとんどは次のとおりです。

System.Threading.Thread thread = new System.Threading.Thread(getMyToken);
thread.Start();

次のgetMyTokenように:

 private void getMyToken()
    {
        MessageBox.Show("In getMyToken()");
        requestToken = DropBoxStorageProviderTools.GetDropBoxRequestToken(config, "7nu03leznnz6x74", "ex3gge8av7kp9lq");
    }

もちろん、constructor() の前にstatic DropBoxRequestToken requestToken;and を宣言しました。static DropBoxConfiguration config;

したがって、私の新しいコードは次のようになります。

config = CloudStorage.GetCloudConfigurationEasy(nSupportedCloudConfigurations.DropBox) as DropBoxConfiguration;
MessageBox.Show("Done 1st!");
System.Threading.Thread thread = new System.Threading.Thread(getMyToken);
thread.Start();
String AuthorizationUrl = DropBoxStorageProviderTools.GetDropBoxAuthorizationUrl(config, requestToken);
MessageBox.Show("Done 2nd!");
ICloudStorageAccessToken accessToken = DropBoxStorageProviderTools.ExchangeDropBoxRequestTokenIntoAccessToken(config, "7nu03leznnz6x74", "ex3gge8av7kp9lq", requestToken);

うん、私はそれらの MessageBox をどこに行くかを追跡するために置きました。問題は、 「最初に完了!」を得たことです。、次に「2番目に完了!」「一発で完成!」のはずなのに、、「getMyToken() で」「2 番目に完了!」. しかし、 「2番目にやった!」の直後。メソッドに入った直後に、メソッドSystem.UnauthorizedAccessExceptionによって引き起こされた例外です (行で例外が発生します)。getMyTokenMessageBox.Show("In getMyToken()");

何が起こっているのかわかりません。この投稿では明確に説明できない場合があるため、詳細についてはお気軽にお問い合わせください。お時間をいただきありがとうございます。

4

1 に答える 1