没有响应显示在标题栏
问题描述:
我打电话给服务器api并等待响应。我只能在得到服务器响应后才能继续。但有些时候服务器响应只有在一段时间后才会收到,而我的标题栏显示“Not responding”消息。我该如何解决这个问题。没有响应显示在标题栏
我的代码块是
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;
}
}
感谢
答
的Windows显示应用中丝毫不差,当窗口过程循环(也就是你的主应用程序线程)不处理邮件的未响应的消息。
当您的主应用程序线程忙于某种等待或循环(就像您描述并无法处理Windows消息)时,会发生这种情况。
你有一些选择,因为应用程序无法继续,直到它从服务器获取的响应,你必须选择:
- 等待服务器上的第二个线程,让您的应用程序“停止”直到收到响应为止(并且停止了我的意思是处理用户界面,但无法做其他任何事情,例如使用进度条和信号量)。
- 不时使用Application.DoEvents()。对于这个工作,你需要能够等待服务器仅一段时间:
while (!initialized)
{
Application.DoEvents();
initialized = Server.WaitInitialize(1000);
}
答
而不是阻止用户界面,做好这项工作在后台线程(也许BackgroundWorker
,也许ThreadPool
)。由于它听起来像你想模仿同步,只需禁用的UI控件 - 不要挂表格。然后在做从服务器获取响应时更新UI。
答
我会建议实现异步回调。这会让你的应用程序响应。您可以通过webrequest类轻松实现异步回调。
`DoEvents`很少是这个问题的好答案... – 2009-08-03 10:56:28