我正在调用服务器api并等待响应。我只有在收到服务器的回复后才能继续。但有时服务器响应只是在一段时间延迟后收到,而我的标题栏显示无响应消息。我该如何解决这个问题。
我的代码块是
private string SubmitDocument(XmlDocument xmlinput, string URL)
{
try
{
// get the data from the xml document into a byte stream
Byte[] byteinput = System.Text.Encoding.UTF8.GetBytes(xmlinput.OuterXml);
// instantiate a web client
System.Net.WebClient myWebClient = new System.Net.WebClient();
myWebClient.Headers.Add("Content-Type", "text/xml");
byte[] responseArray = myWebClient.UploadData(URL, byteinput);
string responseString = Encoding.ASCII.GetString(responseArray);
return responseString;
}
catch(Exception ex)
{
return null;
}
}
由于
答案 0 :(得分:8)
不是阻止UI,而是在后台线程上执行此操作(可能是BackgroundWorker
,也许是ThreadPool
)。由于听起来您想要模拟同步,只需禁用 UI控件 - 不要挂起表单。然后在做从服务器获得响应时更新UI。
答案 1 :(得分:0)
我建议实现异步回调。这将使您的应用响应。您可以通过webrequest类轻松实现异步回调。
答案 2 :(得分:-1)
当窗口proc循环(即主应用程序线程)不处理消息时,Windows会在应用程序中显示一条非响应消息。
当您的主应用程序线程忙于某种等待或循环时(正如您所描述的那样,并且无法处理Windows消息),会发生这种情况。
您有一些选择,因为应用程序无法继续,直到它从服务器获得您必须选择的响应:
while (!initialized)
{
Application.DoEvents();
initialized = Server.WaitInitialize(1000);
}