gpt4 book ai didi

c# - IAsyncResult 未完成并锁定 UI

转载 作者:太空宇宙 更新时间:2023-11-03 13:57:15 24 4
gpt4 key购买 nike

我正在进行 REST 调用,服务器端响应采用 XML 格式。我正在异步进行此调用。我已经将它作为控制台应用程序进行了测试,它可以正常工作。但是,当我在 XBOX 上测试它时,异步请求永远不会完成。我的 processVideo 方法解析 XML 并将项目放入列表中。我需要从另一个类引用此列表,因此我添加了 (result.IsCompleted == false) 以确保在引用和使用列表之前完成异步调用。似乎异步请求永远不会完成并锁定 UI,有什么想法吗?

 public void initilaizeRest()
{
WebRequest request = HttpWebRequest.Create(URI);
request.Method = GET;
// RequestState is a custom class to pass info to the callback
RequestState state = new RequestState(request, URI);
IAsyncResult result = request.BeginGetResponse(new AsyncCallback(getVideoList), state);

Logger.Log("Querystate :"+QUERYSTATE+" URI:"+URI);

/// Wait for aynchronous response to be completed
while (result.IsCompleted == false)
{
Logger.Log("Sleeping");
Thread.Sleep(100);
}

}

  public void getVideoList(IAsyncResult result)
{
RequestState state = (RequestState)result.AsyncState;
WebRequest request = (WebRequest)state.Request;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);


//Process response
switch (QUERYSTATE)
{
case (int)Querystate.SERIESQUERY:
Logger.Log("Processing series state");
processSeries(response);
break;
case (int)Querystate.VIDEOQUERY:
Logger.Log("Processing video state");
processVideo(response);
break;
}

}

public void processVideo(HttpWebResponse response)
{
//parses XML into an object and places items in a LIST
}

最佳答案

while 循环是您的问题。您不应该像这样等待异步调用完成。您应该在发送给 Begin 方法的异步回调中做您想做的任何事情。原因是 UI 设置了用于异步回调的同步上下文。其工作方式是将回调编码到 UI 线程,以便维护 UI 上下文。因为您的 while 循环阻塞了您的 UI 线程,回调永远不会发生,导致异步调用未完成。

希望这对您有所帮助。

关于c# - IAsyncResult 未完成并锁定 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11765714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com