当前位置: 首页 > 编程语言 > C#

如何等待webclientOpenReadAsync完成共享

时间:2023-04-11 10:32:30 C#

如何等待webclientOpenReadAsync完成我在我的WindowsPhone8.1应用程序中使用WebClient从Internet下载一些东西。下面是我在我的应用程序中使用的示例代码-我正在调用下面的方法,但我的网络客户端不会等待读取操作完成并在OpenReadAsync调用后立即返回。如何确保我的方法返回操作必须等到OpenReadCompleted事件完成?我见过多个类似的问题,但找不到解决方案。我的自定义对象外部对象;//我的自定义对象privatestaticvoidCheckNetworkFile(){try{WebClientwebClient=newWebClient();webClient.OpenReadCompleted+=(s,e)=>{externalObj=myReadWebclientResponse(e.Result);//我的自定义方法来读取响应};webClient.OpenReadAsync(newUri("http://externalURl.com/sample.xml",UriKind.Absolute));}catch(Exception){externalObj=null;我建议您将WebClient.OpenReadTaskAsync与.NET4.5中引入的async/await关键字结合使用。您需要在您的方法中添加async关键字,以便它返回一个Task,建议您的方法以Async后缀结束:MyCustomObjectexternalObj;privatestaticasyncTaskCheckNetworkFileAsync(){try{WebClientwebClient=newWebClient();流stream=awaitwebClient.OpenReadTaskAsync(newUri("http://externalURl.com/sample.xml",UriKind.Absolute));externalObj=myReadWebclientResponse(stream);}catch(Exception){externalObj=null;}}编辑:正如您所说,WebClient.OpenReadTaskAsync不适用于WP8.1,因此让我们创建一个扩展方法,它将是:publicstaticclassWebClientExtensions{publicstaticTaskOpenReadTaskAsync(thisWebClientclient,Uriuri){vartcs=newTaskCompletionSource();OpenReadCompletedEventHandleropenReadEventHandler=null;openReadEventHandler=(sender,args)=>{try{tcs.SetResult(args.Result);}catch(Exceptione){tcs.SetException(e);}};client.OpenReadCompleted+=openReadEventHandler;client.OpenReadAsync(uri);返回tcs.Task;现在您可以在WebClient上使用它了。您可以在async-awaitwiki中找到很棒的读物,只需在搜索栏中按该标签进行过滤即可。我希望这不是太离题,但是正在研究这个的其他人可能想知道上面的代码示例也可以用于Silverlight中的WCF调用。请务必先添加Microsoft.Bcl.AsyncNuGet包。下面是一个WCF代码示例:vartaskCompletionSource=newTaskCompletionSource();事件处理器completedHandler=null;completedHandler=(s,args)=>{try{taskCompletionSource.SetResult(args.Result);}catch(Exceptione){taskCompletionSource.SetException(e);}};dataAccessServiceClient.AuthenticateCompleted+=completedHandler;dataAccessServiceClient.AuthenticateAsync(用户名,密码);返回等待taskCompletionSource.Task;可以这样调用:以上是C#学习教程:如何等待webclientOpenReadAsync完成所有共享的内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——varresult=awaitAuthenticateAsync(username,password);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢