Одно сообщение
Я пишу приложение, в котором, когда что-то случилось с соединением, я хочу открыть окно сообщения и показать пользователю ошибку...
для этого, когда программа сгенерирует исключение, она попадет в блок 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.
}