C# WebClient.OpenReadCompleted-如何等待此事件完成
因此,基本上,我正在创建一个dll项目,它必须从bing maps api获取一些信息。下面我粘贴了一个方法,该方法负责获取和序列化响应:C# WebClient.OpenReadCompleted-如何等待此事件完成,c#,webclient,bing-maps,C#,Webclient,Bing Maps,因此,基本上,我正在创建一个dll项目,它必须从bing maps api获取一些信息。下面我粘贴了一个方法,该方法负责获取和序列化响应: private void GetResponse(Uri uri, Action<Response> callback) { WebClient wc = new WebClient(); wc.OpenReadCompleted += (o, a) => {
private void GetResponse(Uri uri, Action<Response> callback)
{
WebClient wc = new WebClient();
wc.OpenReadCompleted += (o, a) =>
{
if (callback != null)
{
DataContractJsonSerializer responseSerializer = new DataContractJsonSerializer(typeof(Response));
callback(responseSerializer.ReadObject(a.Result) as Response);
}
};
wc.OpenReadAsync(uri);
}
我的问题是,第二个方法返回空对象,GetResponse方法中的部分稍后执行。是否有办法等待此事件完成然后返回,或者我需要重新设计它?(我可以使用的.NET的最大版本是4.0)我建议,如果您想等待,请使用Task,将方法competable转换为async,然后像下面那样等待
private async Task RequestDataAsync(string uri, Action<string> action)
{
var client = new WebClient();
string data = await client.OpenReadAsync(uri);
action(data);
}
这将提供更多帮助:我建议,如果您想等待,而不是使用Task,请将competable方法转换为async和wait,如下所示
private async Task RequestDataAsync(string uri, Action<string> action)
{
var client = new WebClient();
string data = await client.OpenReadAsync(uri);
action(data);
}
这将提供更多帮助:我建议,如果您想等待,而不是使用Task,请将competable方法转换为async和wait,如下所示
private async Task RequestDataAsync(string uri, Action<string> action)
{
var client = new WebClient();
string data = await client.OpenReadAsync(uri);
action(data);
}
这将提供更多帮助:我建议,如果您想等待,而不是使用Task,请将competable方法转换为async和wait,如下所示
private async Task RequestDataAsync(string uri, Action<string> action)
{
var client = new WebClient();
string data = await client.OpenReadAsync(uri);
action(data);
}
更多帮助:听起来像是解决方案。将尝试“找不到'async'修饰符所需的所有类型。您是针对错误的框架版本,还是缺少对程序集的引用?”哦,就是这样-我可以使用4.0作为最高的框架。无论如何,谢谢您的帮助。@MajkeloDev-我不确定,但如果您能够更改框架版本,它会的work@MajkeloDev-检查此项,说明您可以通过安装一些类似nuget pkgSounds的解决方案来包括。将尝试“找不到'async'修饰符所需的所有类型。您是针对错误的框架版本,还是缺少对程序集的引用?”哦,就是这样-我可以使用4.0作为最高的框架。无论如何,谢谢您的帮助。@MajkeloDev-我不确定,但如果您能够更改框架版本,它会的work@MajkeloDev-检查此项,说明您可以通过安装一些类似nuget pkgSounds的解决方案来包括。将尝试“找不到'async'修饰符所需的所有类型。您是针对错误的框架版本,还是缺少对程序集的引用?”哦,就是这样-我可以使用4.0作为最高的框架。无论如何,谢谢您的帮助。@MajkeloDev-我不确定,但如果您能够更改框架版本,它会的work@MajkeloDev-检查此项,说明您可以通过安装一些类似nuget pkgSounds的解决方案来包括。将尝试“找不到'async'修饰符所需的所有类型。您是针对错误的框架版本,还是缺少对程序集的引用?”哦,就是这样-我可以使用4.0作为最高的框架。无论如何,谢谢您的帮助。@MajkeloDev-我不确定,但如果您能够更改框架版本,它会的work@MajkeloDev-检查此项,说明您可以通过安装一些nuget pkg来包括