Возвращать сообщения об ошибках из C # DLL в программу C #? - PullRequest
2 голосов
/ 25 августа 2011

Я выделил класс программы winforms в отдельную DLL.DLL использует try-catch для всех методов сбора ошибок.Когда все еще был класс winforms, я бы поймал ошибку, зарегистрировал ее и затем уведомил пользователя через MessageBox.С помощью DLL я улавливаю ошибку, регистрирую ее - но я не уверен, как уведомить пользователя об ошибке?

Как лучше всего уведомить пользователя об ошибке в DLL?

Ответы [ 5 ]

7 голосов
/ 25 августа 2011

Если вы хотите зарегистрировать это, тогда хорошо, поймайте это, зарегистрируйте это, затем бросьте соответствующее исключение и позвольте потребителю решить, как лучше всего иметь дело с этим.Если у вас нет значения для добавления и семантики для изменения, просто сделайте это в своей DLL:

catch(SpecificException ex)
{
     LogException(ex);
     throw;
}

Если у вас есть дополнительная информация, которую нужно добавить, то сгенерируйте соответствующее новое исключение, используясоответствующий конструктор, который включает это перехваченное исключение в качестве значения innerException.

То, что вы не должны делать (я видел слишком много людей, пытающихся это сделать), это "умно" определить, какой тип приложения потребляетDLL, и попытаться отобразить пользовательский интерфейс из библиотеки DLL.Даже если вы правильно понимаете все текущие сценарии использования («Это когда-либо используется только приложениями WinForms»), вы теперь ограничиваете потенциал повторного использования в будущем.

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

4 голосов
/ 25 августа 2011

Не лови ошибку!Поймай это, зарегистрируй его, затем rethrow , если нужно, но не глотай исключения.Пусть он распространяется до хост-приложения, которое затем может обрабатывать его как угодно (например, показывать окно сообщения).

1 голос
/ 25 августа 2011

Как уже говорили другие, выкиньте исключение после регистрации.Если у вас есть отдельный поток / таймер в этой dll, и нечего его перебрасывать, сообщите об этом через событие, которое может прослушать приложение хоста.

1 голос
/ 25 августа 2011

Вы должны продолжать генерировать исключение в вашей dll (после того, как вы вошли в систему)

Хорошей практикой является устранение ошибок и исключений при последней возможности. В вашем случае это должно быть в приложении winform.

1 голос
/ 25 августа 2011

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

...