首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个新的非UI线程来执行windows phone 8中的请求。

创建一个新的非UI线程来执行windows phone 8中的请求。
EN

Stack Overflow用户
提问于 2015-04-22 08:54:05
回答 1查看 171关注 0票数 0

我使用SharpBox 1.2对以下代码进行授权:

代码语言:javascript
复制
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应用程序中使用,因为这些调用会阻塞正在运行的UI线程,从而阻止整个应用程序。 异步函数可以在UI线程中使用。如果需要的函数仅存在于同步变体中,则可以在另一个(非UI)线程中运行这些函数,并使用回调返回结果。

看起来这就是我的代码库的问题所在,这就是为什么我决定创建一个新线程来处理requestToken行。我发现的大多数建议是:

代码语言:javascript
复制
System.Threading.Thread thread = new System.Threading.Thread(getMyToken);
thread.Start();

对于getMyToken,如下所示:

代码语言:javascript
复制
 private void getMyToken()
    {
        MessageBox.Show("In getMyToken()");
        requestToken = DropBoxStorageProviderTools.GetDropBoxRequestToken(config, "7nu03leznnz6x74", "ex3gge8av7kp9lq");
    }

当然,我在构造函数()之前声明了static DropBoxRequestToken requestToken;static DropBoxConfiguration config;

所以我的新代码是:

代码语言:javascript
复制
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()"然后“完成第二!e 224。但是就在"Done 2“之后,是由getMyToken方法引起的System.UnauthorizedAccessException异常,就在进入该方法之后( MessageBox.Show("In getMyToken()");行发生异常)。

我不知道怎么回事。请随时索取更多的信息,因为我可能不会在这篇文章中清楚地描述它。谢谢您抽时间见我。

EN

回答 1

Stack Overflow用户

发布于 2015-04-22 10:03:14

我找到了。将所有代码放入getMyToken中,它就能工作,而不仅仅是一个requestToken。因此,我的事件处理程序中的代码只是:

代码语言:javascript
复制
private async void toDropBoxBtn_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
  System.Threading.Thread thread = new System.Threading.Thread(getMyToken);
  thread.Start();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29792395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档