2010-10-06 3 views
2

Я приобрел стороннюю библиотеку, которую я использую из своего приложения. Мое приложение ссылается на небольшую межпланетную 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() только для целей отладки). Этот улов не срабатывает.

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

+0

Обертка StartNew() с помощью try-catch не приведет к исключению, которое происходит в потоке. Можете ли вы показать «локальную» попытку? –

+0

Но вызов .wait должен. Правильно? – colithium

+0

Код вокруг вызова - это просто попытка {...} catch (Exception) {...} – colithium

ответ

0

Посмотрите на это blog, возможно, вам удастся получить отчет о сбое, а на листе посмотреть, какой вызов терпит неудачу, и сообщить об этом своему стороннему разработчику.

+0

Любое сообщение, в частности? Я даже не получаю сообщение из окон, что моя программа перестала отвечать/разбилась. Он просто уходит молча. Это заставляет меня думать, что dll обнаруживает условие ошибки и выходит из всего процесса, а не идет по нормальному маршруту. – colithium

+0

Она изменила свой блог, но раньше было руководство о том, как получить свалку сбоя, а затем проанализировать его с помощью windbg – rerun

Смежные вопросы