标题栏中显示无响应

时间:2009-08-03 10:32:35

标签: c#

我正在调用服务器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;
        }
    }

由于

3 个答案:

答案 0 :(得分:8)

不是阻止UI,而是在后台线程上执行此操作(可能是BackgroundWorker,也许是ThreadPool)。由于听起来您想要模拟同步,只需禁用 UI控件 - 不要挂起表单。然后在从服务器获得响应时更新UI。

答案 1 :(得分:0)

我建议实现异步回调。这将使您的应用响应。您可以通过webrequest类轻松实现异步回调。

答案 2 :(得分:-1)

当窗口proc循环(即主应用程序线程)不处理消息时,Windows会在应用程序中显示一条非响应消息。

当您的主应用程序线程忙于某种等待或循环时(正如您所描述的那样,并且无法处理Windows消息),会发生这种情况。

您有一些选择,因为应用程序无法继续,直到它从服务器获得您必须选择的响应:

  1. 在第二个线程上等待服务器并让您的应用程序“停止”直到收到响应(并且停止我意味着处理用户界面但无法执行任何其他操作,例如使用进度条和信号量)。
  2. 不时使用Application.DoEvents()。为此,您需要能够在一段时间内等待服务器:

  3. while (!initialized)
    {
      Application.DoEvents();
      initialized = Server.WaitInitialize(1000);
    }