Я использую простое консольное приложение для преобразования форм infopath в файлы PDF.Вот краткое изложение того, как я собираюсь об этом.
Сводка: Консольное приложение создает форму Windows.Когда форма загружена (модально), я добавляю элемент управления infopath (Microsoft.Office.InfoPath.FormControl) в это окно.В этот момент я вызываю infoPathControl.Open (myInfoPathFileStream).Все это делается в замкнутом круге.
Проблема: Случайно приложение будет выдавать исключения (катастрофический сбой, повреждение кучи и т. Д.), И даже лучше, оно иногда будет зависать без выдачи ошибки.Ведение журнала и отладка привели меня к мысли, что оно зависает в вызове infoPathControl.Open (myInfoPathFileStream).Очевидно, что для автоматизированного процесса это недопустимо.
Попытки (но неуспешные) решения
- Я попытался обернуть каждую созданную форму в свой собственный (STA) поток и использовать thread.join.Это не сработало из-за проблем с COM.
- Я попытался обернуть каждую итерацию цикла в свою собственную область приложения.Это сработало до некоторой степени, но из-за того, что домены приложений по-прежнему синхронизированы, это не решит проблему зависания без ошибок.Кроме того, как ни странно, мне кажется, что я не всегда могу отловить исключения, генерируемые COM-объектом.
- Наконец, я попытался поместить таймер в поток формы, чтобы выдать исключение, если время таймера истекло.До сих пор я не смог доказать в любом случае, работает ли это или нет.
Любые идеи будут высоко оценены, поскольку я уже потратил на это много времени.
Спасибо!