Я приобрел стороннюю библиотеку, которую я использую из своего приложения. Мое приложение ссылается на небольшую межпланетную DLL, которая, в свою очередь, вызывает другую dll (не CLI) для выполнения своей задачи. Поскольку эта библиотека взаимодействует с аппаратным обеспечением, я бы хотел, чтобы эта dll говорила с различными драйверами устройств.C# - Восстановление из исключения из Interop
Типичный метод подпись из DLL-взаимодействия выглядит следующим образом:
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0xc9)]
public virtual extern void Send([MarshalAs(UnmanagedType.Struct)] ref object pVal);
У меня есть все звонки в эту библиотеку, завернутой в один большой попытке поймать (Exception). Если что-то пойдет не так с отправкой, мне нужно отметить его как неудачный и двигаться дальше. К сожалению, мое приложение будет просто случайно закрываться без каких-либо исключений. Что я могу с этим поделать? Эти вызовы уже выполняются в отдельном потоке. Используя Task.Factory.StartNew(), но все приложение просто завершает работу. В дополнение к локальному try catch, есть еще один, завернутый вокруг вызова StartNew (у меня есть вызов .Wait() только для целей отладки). Этот улов не срабатывает.
Прямо сейчас я думаю, что единственным решением является создание отдельной программы, которая просто ждет другого, чтобы закрыть, а затем снова открыть его. Что звучит ужасно ...
Обертка StartNew() с помощью try-catch не приведет к исключению, которое происходит в потоке. Можете ли вы показать «локальную» попытку? –
Но вызов .wait должен. Правильно? – colithium
Код вокруг вызова - это просто попытка {...} catch (Exception) {...} – colithium