我使用 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 库具有用于许多操作的同步和异步功能。这两种形式对于桌面使用都很有用,但同步版本不能直接在 Windows Phone 应用程序中使用,因为这些调用会阻塞正在运行的 UI 线程,因此会阻塞整个应用程序。
异步函数可以在 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");
}
当然我已经在构造函数()之前声明static DropBoxRequestToken requestToken;
了 。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 用来跟踪它的去向。问题是我得到了“第一个完成!” ,然后“第二次完成!” 当它应该是“第一次完成!” ,“在 getMyToken() 中”然后“第二次完成!” . 但就在“第二次完成!”之后 是方法System.UnauthorizedAccessException
引起的异常getMyToken
,刚进入方法后(异常发生MessageBox.Show("In getMyToken()");
在行)。
我不知道是怎么回事。随意询问更多信息,因为我可能不会在这篇文章中清楚地描述它。感谢您的时间。