Word Interop внезапно занимает очень много времени, чтобы бросить слово - PullRequest
0 голосов
/ 05 ноября 2019

Внезапный вызов:

((Microsoft.Office.Interop.Word._Application)word).Quit(SaveChanges: Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges, OriginalFormat: Type.Missing);

длится вечно (30-60 секунд) вместо максимум 3 секунд. Это не происходит, когда я использовал его для создания PDF, но когда я создаю DOCX. Я не пробовал все варианты ...

Это может быть связано с новой версией Windows в последнее время. У меня возникло это подозрение, когда я увидел, что какой-то парень обновил старый пост менее 2 месяцев назад относительно слова interop: ССЫЛКА См .: «Изменить на 2019-09-29» Я не пробовал ничего из этогоони пишут о там. Главным образом потому, что я этого не понимаю и раньше это не было необходимо.

Для меня проблема в 2 компьютерах с Windows 10. Мой рабочий стол был обновлен до 1903 неделю назад, так что это может быть. Он все еще отлично работает на моем Windows-сервере под управлением Word 2016. Мой рабочий стол работает под управлением Word 365, но так же работает Surface Pro 3 моего друга, и у него нет проблем. Я не знаю, обновлял ли он свои windows10 недавно.

Интересно, что у меня была такая же проблема, когда я просто нормально открывал слово пустым документом, а затем снова закрывал его. Окна закрылись, но текстовый процесс диспетчера задач закрывался очень долго, и это вызвало у меня подозрения. Затем я попытался поиграть со словом «настройки», и когда я выключил «Показывать сценарий запуска при запуске этого приложения», он сразу же начал закрывать процесс. Ofc Я тогда, хотя: "БОЛЬШОЙ, проблема решена", но нет. Все еще та же проблема при использовании взаимодействия. Я попытался смоделировать отключение «показать стартовый экран», добавив следующую строку: word.ShowStartupDialog = false;Это просто бросает ожидание, говоря мне, что ShowStartupDialog не доступен, когда нет открытого окна. Это может быть связано с тем, что я запускаю слово в невидимом режиме.

Я решил проблему, поместив код завершения в поток, подобный этому, в конце:

System.Threading.Thread t = new System.Threading.Thread(() =>
{               
    ((Microsoft.Office.Interop.Word._Application)word).Quit(SaveChanges: 
    Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges, OriginalFormat: Type.Missing);             
});

t.IsBackground = true;
t.Start();

ЗатемЯ могу продолжать работать в программе и даже снова вызывать ту же функцию, создавая другой документ. Затем он запустит другой процесс, пока старый все еще закрывается. Я только что попытался иметь 3 закрытия одновременно, что достаточно для моего использования. Кроме того, это занимает довольно много процессорных 25 +% за экземпляр! Мой компьютер не совсем новый, но он способен нормально запускать CS GO, поэтому я действительно считаю, что мощности машины должно быть более чем достаточно:).

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

1 Ответ

2 голосов
/ 06 ноября 2019

Оказывается, проблема не имела ничего общего с взаимодействием, поэтому мне не нужно менять код. Если я открою любой файл docx (локальный или нелокальный) в word, а затем снова закрою его, потребуется много времени, чтобы процесс Microsoft Word (32-разрядный) закрылся. Если я затем в Word открою вкладку «Учетная запись» в левом углу и выйду из своей учетной записи. Проблема исчезает ... Боже, я думал, что буду делать это весь день, но нет, и, конечно, это так. DOH. Извините, ребята.

После нескольких тестов, открыв несколько документов, вдруг снова стало больше времени. По-видимому, он автоматически снова вошел в систему. После очередного выхода это снова решило проблему, поэтому я убежден. Конечно, я не хотел, чтобы мой личный компьютер оставался без подписки навсегда, затем я снова выполнил вход вручную, и да, на этот раз это займет больше времени, но не намного дольше. Возможно 3-4 секунды. Все еще лучше, чем 20-30. Похоже, что как только Onedrive запущен и работает под «Подключенными службами».

...