Не отвечающий отображается в строке заголовка

2

Я вызываю сервер 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 ответа

8

Вместо того, чтобы блокировать пользовательский интерфейс, выполните эту работу в фоновом потоке (возможно, BackgroundWorker, возможно, ThreadPool). Поскольку кажется, что вы хотите эмулировать синхронный, просто отключить элементы управления пользовательским интерфейсом - не висеть. Затем обновите пользовательский интерфейс, когда вы получите ответ от сервера.

0

Я предлагаю реализовать асинхронный вызов. Это заставит ваше приложение реагировать. Вы можете легко реализовать асинхронный вызов через класс webrequest.

-1

Windows показывает неответственное сообщение в типе приложения, когда цикл proc окна (то есть ваш основной поток приложения) не обрабатывает сообщения.

Это происходит, когда ваш основной поток приложений занят каким-то образом ожидания или цикла (так же, как вы описываете и не можете обрабатывать сообщения Windows).

У вас есть некоторые параметры, так как приложение не может продолжаться до тех пор, пока оно не получит ответ от сервера, на котором у вас есть параметры:

  • Подождите, пока сервер будет на втором потоке, и пусть ваше приложение "остановится" до получения ответа (и остановлено я имею в виду обработку пользовательского интерфейса, но не могу ничего сделать, например, с индикатором выполнения и семафором).
  • Используйте Application.DoEvents() время от времени. Для этого вам нужно будет ждать сервер только в течение определенного периода времени:

while (!initialized)
{
  Application.DoEvents();
  initialized = Server.WaitInitialize(1000);
}  
  • 1
    DoEvents редко является хорошим ответом на эту проблему ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню