在不使用线程的情况下完成Oauth

时间:2013-12-09 03:42:19

标签: c#

我不确定如何解释这一点,所以我会尽力给予它。 基本上我有一个连接到DropBox的应用程序。我遇到的一个情况是注册过程。在注册过程中,它使用默认浏览器连接到DropBox,然后需要用户登录并单击允许应用程序使用该服务。作为回报,您将获得一个应用程序可用于连接服务的令牌。我遇到的问题是让应用程序等到上述过程完成。我想出让它等待的唯一方法是使用system.threading(int)。但是,如果此人需要更长时间然后超时,则无法正确注册。

我希望有人可以指出我正确的方向并让它等待没有线程功能。我希望我可以使用if循环或其他东西,但我不知道如何正确地做到这一点。

这是实际的Oauth代码:

private static OAuthToken GetAccessToken()
    {
        string consumerKey = "*****";
        string consumerSecret = "****";
        var oauth = new OAuth();
        var requestToken = oauth.GetRequestToken(new Uri(DropboxRestApi.BaseUri), consumerKey, consumerSecret);
        var authorizeUri = oauth.GetAuthorizeUri(new Uri(DropboxRestApi.AuthorizeBaseUri), requestToken);
        Process.Start(authorizeUri.AbsoluteUri);
        return oauth.GetAccessToken(new Uri(DropboxRestApi.BaseUri), consumerKey, consumerSecret, requestToken);
    }

,这是单击注册按钮时调用的完整oauth函数:

var accesstoken = GetAccessToken();

1 个答案:

答案 0 :(得分:0)

您需要制作其GetAccessToken调用的Async(异步)版本。在完成后会调用你的某些功能的。

您也可以循环直到信息准备就绪,例如

while (dataIsNotReady()) {
    Thread.Sleep(1000); // sleep for a bit. this is bad, locks up entire thread maybe even application while it sleeps.  Make it shorter for less impact.
    // TODO add a "timeout", i.e. only try this for X amount of time before breaking out
}

// Now we data is ready let's go

<强>更新 也许你最好使用一个可以为你做异步的库,例如这个Dropbox C#库:https://github.com/dkarzon/DropNet