异步请求.NET 3.5

时间:2014-07-15 14:02:28

标签: .net .net-3.5

我不得不将.NET 3.5用于客户端项目。通常我会使用.NET 4.5并使用Async / Await,但我不能将4.5用于此项目。

我不确定我的解决方案是否正确,但看起来很简单。基本上,以下方法将异步下载文件,并返回一个布尔值来表示成功与否。但是在主代码中,我不确定在继续下一行代码之前如何实际等待方法的响应。

private bool DownloadJSONFile(string url)
    {
        bool responseStatus = false;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

        request.BeginGetResponse(result => {
            using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result))
            {
                if(response.StatusCode == HttpStatusCode.OK)
                {
                    responseStatus = true;
                }
            }
        }, null);

        return responseStatus;
    }

这是调用DownloadJSONFile的主要函数:

private void Form1_Load(object sender, EventArgs e)
{
        bool a = DownloadJSONFile("http://myserver.com/clients.json");
        MessageBox.Show("Download complete");
}

在请求完成之前显示消息框。我理解的是完全正常的。

如何等待DownloadJSONFile完成?

1 个答案:

答案 0 :(得分:2)

你可以在完成后调用另一种方法

request.BeginGetResponse(result => {
    using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result))
    {
        if(response.StatusCode == HttpStatusCode.OK)
        {
            responseStatus = true;
            DoSomething();

        }
    }
}, null);

然后将其添加到某处

private void DoSomething()
{
    MessageBox.Show("Done!");
}

否则,您可以查看.Net 3.5 AsyncBridge:https://www.nuget.org/packages/AsyncBridge.Net35