Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebClient.OpenReadCompleted-如何等待此事件完成_C#_Webclient_Bing Maps - Fatal编程技术网

C# WebClient.OpenReadCompleted-如何等待此事件完成

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) => {

因此,基本上,我正在创建一个dll项目,它必须从bing maps api获取一些信息。下面我粘贴了一个方法,该方法负责获取和序列化响应:

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来包括