Как я могу обрабатывать и сообщать о низкоуровневых ошибках в wpf gui? - PullRequest
0 голосов
/ 30 июля 2009

У меня есть графический интерфейс WPF, в котором есть экземпляр класса Manager, который, по сути, управляет определенными функциями связи и данных.

У меня в диспетчере есть блоки try / catch, но я хотел бы узнать, как лучше всего сообщить об этом графическому интерфейсу.

Например, нажатие кнопки генерирует событие onClick, и в этом коде я бы назвал Manager.DoProcessing(). Проблема в том, как я узнаю, что DoProcessing разбомбили? Я не хочу окружать вызов функции другой попыткой catch ...

Было бы достаточно вернуть мой собственный ErrorType enum, который идентифицирует ошибку:

enum ErrorType
{
NoError, TimeOut, DBCorrupt
}

и т.д.. Или это упрощенно? Следует добавить, что вызовы на Manager будут связаны с BackgroundWorker ...

1 Ответ

1 голос
/ 30 июля 2009

Не возвращать коды ошибок. C # лучше, чем это. Довольно скоро у вас будет метод, который должен что-то возвращать: public Person GetPerson(int personID){}, и вам не нужно начинать работать с out параметрами. Если GetPerson не может «получить» «персона», это исключительная , поэтому вы должны выбросить исключение.

Является ли ваш класс менеджера моделью представления? Если нет, оберните это в одном. Ваша модель представления должна catch исключение (независимо от того, в каком потоке она встречается) и нести ответственность за ее представление представлению. Один из вариантов - создать ObservableCollection ErrorMessages (или строк, но я бы написал класс ErrorMessage с сообщением, серьезностью, временем возникновения и т. Д.). Тогда ваш XAML может связываться прямо с этим. Всякий раз, когда ваш блок catch добавляет ErrorMessage в коллекцию, ваше представление обновляется само.

Если вы используете BackgroundWorker, то, возможно, вам нужно будет проверить наличие исключений в событии RunWorkerCompleted вместо использования блока catch. Эта документация объясняет как.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...