我不得不将.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
完成?
答案 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