Я загружаю dll, которая порождает несколько потоков внутри себя. Время от времени программа вылетает с необработанным исключением. Я не могу обернуть все мои вызовы библиотеки в операторах try/catch, потому что исключения отбрасываются на отдельные потоки, и у меня нет доступа к источнику библиотеки для отладки/исправления неправильной обработки ошибок. Я хотел бы, чтобы программа продолжала делать другие вещи, когда происходят эти исключения, есть ли изящный способ справиться с этими исключениями? Или это единственное, что я могу сделать, чтобы сделать глобальный метод исключения всех исключений?Как справиться с исключениями в отдельных потоках во внешней dll?
ответ
Если вы загружаете DLL в отдельный домен, вы должны иметь возможность изолировать исключения, сгенерированные с помощью AppDomain.UnhandledException
, но имейте в виду, что это не является доказательством дурака, и есть определенные ситуации, когда он все равно будет обрабатывать ваш процесс и вы ничего не можете с этим поделать (переполнение стека, из памяти и т. д.).
Лучшее, что вы можете сделать в этом случае, полностью загружает их в отдельный процесс с помощью какого-либо коммуникационного устройства для связи с dll и использует некоторую форму удаленного взаимодействия с этим процессом.
Я бы рекомендовал реализовать отдельный процесс (EXE), который запускает ваше приложение и которое, в свою очередь, загружает DLL.
Это позволяет убить/перезапустить процесс всякий раз, когда это будет необходимо ...
Я вижу несколько вариантов, как общаться - например:
- вы можете использовать COM (если вы его реализации как вне-процесс COM-сервер)
- вы могли бы использовать общую память (очень высокую производительность, см this для пошагового и this для .NET 2 обертки)
ЕСЛИ метод должен быть совместим с несколькими версиями Windows. THEN Я бы воздержался от использования чего-либо «сетевого» для IPC (поскольку некоторые из них поставляются с настольным брандмауэром).
- 1. Как справиться с утечкой памяти во внешней DLL
- 2. Task.Status.Faulted - Как справиться с исключениями
- 3. Как справиться с исключениями REST?
- 4. Ловля необработанного исключения в отдельных потоках
- 5. Как справиться с исключениями, указанными в IParameterInspector?
- 6. Тестирование приложения Django во многих отдельных потоках
- 7. Как справиться с исключениями для экземпляра Copy?
- 8. Как справиться с несколькими неожиданными исключениями JSF?
- 9. Как справиться с исключениями клонирования gitpython?
- 10. Как справиться с исключениями, брошенными CompletableFuture.supplyAsync
- 11. Как поймать исключение во внешней dll?
- 12. Использование перечислений, которые находятся во внешней dll
- 13. Как справиться с исключениями в ковбойском обработчике websocket?
- 14. бесконечные петли в отдельных потоках
- 15. Изменение битовой карты C# во внешней DLL
- 16. C# Отражение: Класс Выведение во внешней DLL
- 17. Работа с растровыми изображениями в отдельных потоках
- 18. Как обрабатывать файлы в отдельных потоках?
- 19. Сигналы Qt отсутствуют во внешней dll
- 20. Как справиться с общими исключениями в PL/SQL
- 21. Как справиться с общими исключениями в Asp.Net MVC?
- 22. Как справиться с исключениями Hibernate в автономном приложении Java
- 23. Выполняйте два метода в отдельных потоках одновременно
- 24. Как справиться с исключениями, брошенными из устройства чтения элементов?
- 25. Каков правильный способ справиться с Исключениями в перехватчиках в EJB3?
- 26. Справочные изображения, хранящиеся во внешней dll с помощью wpf
- 27. Лучший способ справиться с вложенными исключениями через слой в Java
- 28. C# Setup с внешней DLL
- 29. ASP.NET WebAPI Контроллеры во внешней DLL с помощью MEF
- 30. Как использовать интерфейс внешней dll в C#
Если бы это было возможно, w3wp.exe не потерпит крах, если у вас было необработанное исключение в отдельном потоке. Произошло несколько раз с моим хостинг-провайдером уже ... – leppie