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

来自AudioPlayerAgent的HttpWebRequest分享

时间:2023-04-10 15:36:38 C#

C#学习教程:来自AudioPlayerAgent的HttpWebRequest我可以查询一个单独的Web服务以获取当前播放曲目的标题和艺术家。我想要做的是每20秒查询一次服务,然后相应地设置曲目标题/艺术家。目前我正在使用后台AudioPlayerAgent,以便可以在我的应用程序之外播放流。这是我到目标前停止的代码:publicAudioPlayer(){if(!_classInitialized){_classInitialized=true;//订阅托管异常处理程序Deployment.Current.Dispatcher.BeginInvoke(delegate{Application.Current.UnhandledException+=AudioPlayer_UnhandledException;});trackTimer=newTimer(TrackTimerTick,null,1000,5000);}}publicvoidTrackTimerTick(objectstate){//创建一个指向所需URL的HttpWebrequest对象。HttpWebRequesttrackRequest=(HttpWebRequest)HttpWebRequest.Create("");//启动异步请求。IAsyncResult结果=(IAsyncResult)trackRequest.BeginGetResponse(newAsyncCallback(TrackCallback),trackRequest);}publicvoidTrackCallback(IAsyncResultresult){if(BackgroundAudioPlayer.Instance.PlayerState==PlayState.Playing&&result!=null){try{//请求状态是异步的。HttpWebRequesttrackRequest=(HttpWebRequest)result.AsyncState;HttpWebResponse跟踪响应=(HttpWebResponse)trackRequest.EndGetResponse(结果);使用(StreamReaderhttpwebStreamReader=newStreamReader(trackResponse.GetResponseStream())){stringresults=httpwebStreamReader.ReadToEnd();StringReaderstr=newStringReader(结果);XDocumenttrackXml=XDocument.Load(str);stringtitle=(fromtintrackXml.Descendants("channel")选择t.Element("title").Value).First();stringartist=(fromtintrackXml.Descendants("channel")选择t.Element("artist").Value).First();if(BackgroundAudioPlayer.Instance.Track!=null){AudioTracktrack=BackgroundAudioPlayer.Instance.Track;跟踪.BeginEdit();track.Title=标题;追踪。}}trackResponse.Close();通知完成();}catch(WebExceptione){Debug.WriteLine(e);Debug.WriteLine(e.Response);}catch(Exceptione){Debug.WriteLine(e);每当我尝试从HttpWebRequest读取响应时,都会抛出WebException这是正确的方法吗?有人对如何解决这个问题有建议吗?您不要关闭HttpWebResponse,这是必要的。此外,XDocument.Load()的重载采用Stream,因此您根本不需要使用StreamReader。编辑:抱歉,我最后忽略了Close()调用。但另一条评论仍然适用。如果它没有解决问题,至少它会让你的代码看起来更干净:请求是异步的。HttpWebRequesttrackRequest=(HttpWebRequest)result.AsyncState;使用(HttpWebResponsetrackResponse=(HttpWebResponse)trackRequest.EndGetResponse(result)){XDocumenttrackXml=XDocument.Load(trackResponse.GetResponseStream());stringtitle=(fromtintrackXml.Descendants("channel")选择t.Element("title").Value).First();stringartist=(fromtintrackXml.Descendants("channel")选择t.Element("artist").Value).First();if(BackgroundAudioPlayer.Instance.Track!=null){AudioTracktrack=BackgroundAudioPlayer.Instance.Track;跟踪.BeginEdit();track.Title=标题;track.Artist=艺术家;跟踪.EndEdit();}}}通知完成();}catch(WebExceptione){Debug.WriteLine(e);Debug.WriteLine(e.Response);}抓住(异常e){Debug.WriteLine(e);我认为你应该将OnUserAction()中的NotifyComplete()函数移动到你的HttpWebRequest响应中也许这篇文章可以给你一些帮助:)http://tmango.com/?p=952这与AudioPlayer有关开始播放音乐后出界。AudioPlayer只存在一段时间并在调用NotifyComplete后终止请参阅我对这篇文章的回复:AudioPlayerAgent、计时器和网络服务了解更多信息:调用NotifyComplete后,后台音频线程“暂停”。它返回的方式是当用户改变播放时(OnUserAction)或者当歌曲结束时(OnPlayStateChanged)。如果您要继续播放,请在OnPlayStateChanged方法中获取新信息。以上就是C#学习教程:HttpWebRequestfromAudioPlayerAgent分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: