C# httpRequest暂时冻结我的应用程序

C# httpRequest暂时冻结我的应用程序,c#,.net,wpf,oauth,httprequest,C#,.net,Wpf,Oauth,Httprequest,好的,在我继续之前,让我声明我的背景是网络脚本;所以申请对我来说很陌生。我对.NET知之甚少,我一直在利用我有限的知识 无论如何,在我的应用程序中,我有一个OAuth httpRequest。请求本身工作正常,它从web API获取我需要的数据。但是,问题是,每当我单击激活请求的按钮时,我的程序都会冻结几秒钟,直到请求完成。我还有一个请求,每60秒自动完成一次。当然,这意味着每60秒,我的程序就会冻结几秒钟。如何解决这个问题 private string twitchCallAPI(st

好的,在我继续之前,让我声明我的背景是网络脚本;所以申请对我来说很陌生。我对.NET知之甚少,我一直在利用我有限的知识

无论如何,在我的应用程序中,我有一个OAuth httpRequest。请求本身工作正常,它从web API获取我需要的数据。但是,问题是,每当我单击激活请求的按钮时,我的程序都会冻结几秒钟,直到请求完成。我还有一个请求,每60秒自动完成一次。当然,这意味着每60秒,我的程序就会冻结几秒钟。如何解决这个问题

    private string twitchCallAPI(string accessKey, string accessSecret, string endpointURI, string httpMethod)
    {
        OAuthHttpWebRequest httpRequest = new OAuthHttpWebRequest();
        httpRequest.ConsumerToken = new OAuthToken { Token = this.twitchConKey, TokenSecret = this.twitchConSecret };
        httpRequest.Token = new OAuthToken() { Token = accessKey, TokenSecret = accessSecret };
        httpRequest.SetUri(endpointURI);
        httpRequest.Method = httpMethod;

        try
        {
            using (var response = httpRequest.GetResponse())
            {
                using (var reader = new StreamReader(response.GetResponseStream()))
                {
                    return reader.ReadToEnd();
                }
            }
        }
        catch (WebException ex)
        {
            using (var reader = new StreamReader(ex.Response.GetResponseStream()))
            {
                System.Windows.MessageBox.Show(reader.ReadToEnd());
            }
        }
        catch (Exception ex)
        {
            System.Windows.MessageBox.Show(ex.ToString());
        }

        return string.Empty;
    }

您可以尝试使用异步方法,也就是说,使用不同的线程等待请求的响应。这是一个你可以探索的解决方案


主要原因是应用程序正在等待启动的方法完成。您必须了解“异步”概念


执行“异步”方法的程序将继续其工作流,并且不会等待该方法生成结果。

您可以使用一个

简单地说,在任务中执行请求,并使用UI同步上下文更新UI线程

TaskFactory.StartNew(()=>
{
    //do web request
})
.ContinueWith(() =>
{
    this.TextBlock1.Text = "Complete"; 
}, TaskScheduler.FromCurrentSynchronizationContext());

您可以使用wait关键字:

private async void OnButtonClick()
{
   TextBox.Text = await twitchCallAPIAsync(accessKey, accessSecret, endpointURI, httpMethod);
}

嗯,我用我的代码更新了我的第一篇帖子。。。你能更深入地了解我是如何使我的代码异步的吗?你的目标/使用的是什么版本的.Net?嗯,我用我的代码更新了我的第一篇文章。。。你能更深入地了解我如何使我的代码异步吗?我认为我没有足够的经验来教你这个概念。而且这不是做这件事的地方。我能给你的唯一建议是你需要阅读一些关于“异步”概念的材料。您应该使用IAsyncResult启动MSDN。注意:这仅适用于“我还有另一个请求,每60秒自动完成一次。”部分。谢谢,我能够使此方法正常工作。。。即使是点击部分。我刚刚让click方法激活了worker。