Проблема с interop.word в приложении .net - PullRequest
0 голосов
/ 11 июня 2011

Среда решения:

MS Visual Studio 2010 Ultimate, MS Office 2010 Professional, классы Microsoft Interop

Сценарий:

Я создал приложение .Net, которое используетInterop классы для взаимодействия с MS Word.Рассмотрим это: приложение, которое имитирует таблицу пар ключ-значение.Когда пользователь нажимает на поле «значение», приложение .net открывает окно winword, где пользователь может ввести некоторые заметки.После нажатия кнопки закрытия (winword) приложение .net создаст файл winword.wordopenxml и сохранит данные в поле.Для этого я добавил дескрипторы событий в winword.Приложение работает отлично.Проблема возникает, когда у меня открыто несколько экземпляров winword (отдельно от пользователя, но не через приложение .net).Обработчики событий из приложения .net применяются ко всем экземплярам winword и, следовательно, после закрытия только одного слова экземпляра все остальные экземпляры также закрываются.Я пробовал разные способы инициализации объекта word в приложении.Я также попытался обойти «Инициализация двух экземпляров winword и выход из первого экземпляра» -> Этот подход также не сработал.

Гуру: Не могли бы вы помочь мне найти подходящее решение для этой проблемы?

-Rupesh

1 Ответ

1 голос
/ 12 июня 2011

Это не то, что на самом деле происходит.Может показаться, что у вас есть несколько запущенных экземпляров Word, но на самом деле есть только один.Word - очень большая программа, требующая много системных ресурсов.Когда пользователь запускает другую копию, эта копия проверяет, запущен ли Word, и просит открыть документ.И выходит.Исходный экземпляр просто создает другое окно, в противном случае он действительно выглядит точно так же, как другой экземпляр Word.

Поэтому, когда вы завершаете работу Word, вы также убиваете все другие окна.Используйте Taskmgr.exe, вкладка Процессы, чтобы проверить это.В качестве обходного пути рассмотрите перечисление коллекции Documents, чтобы увидеть, что еще открыто.

...