Одно сообщение

Я пишу приложение, в котором, когда что-то случилось с соединением, я хочу открыть окно сообщения и показать пользователю ошибку...

для этого, когда программа сгенерирует исключение, она попадет в блок catch, и в этом я хочу показать пользователю сообщение, вот код:

        catch (WebException ex)
        {
            if (!(ex.Message == "The operation has timed out."))
            {
                  MessageBox.Show(ex.Message);
            }

        }

Кажется, что программа будет приходить к этой ловушке что-то вроде навсегда, пока не установится соединение, так что я должен сделать, чтобы обновлять мое сообщение только по одному ящику сообщений за раз?

2 ответа

Там не так много контроля над MessageBox когда это отображается. Я бы использовал другой Form отображается в модальном режиме. Перед отображением вы можете запустить отдельный поток и поставить логику для контроля соединения. После восстановления уведомите форму сообщения и закройте ее.

Вы можете использовать что-то вроде:

public static class FailureMessagebox
{
    private static bool _hasBeenSuccessful = true;

    public static void ShowIfFailure(Action someAction)
    {
        try
        {
            someAction();
            _hasBeenSuccessful = false;
        }
        catch (Exception err)
        {
            if (_hasBeenSuccessful)
                MessageBox.Show(ex.Message);

            _hasBeenSuccessful = false;
                    throw;
        }
    }
}

Пример использования:

try
{
   WebResponse response;
   FailureMessagebox.ShowIfFailure(() => response = webRequest.GetResponse());
}
catch (WebException err)
{
   //handle the exception here.
}
Другие вопросы по тегам