Несколько экземпляров winword.exe в vb.net

У меня есть приложение vb.net, которое открывает документ Word 2016 один за другим и использует для него приведенный ниже код.

   Public oWA As Microsoft.Office.Interop.Word.Application
   Public oDoc As Microsoft.Office.Interop.Word.Document
   oWA = New Microsoft.Office.Interop.Word.Application
   --below code line opens multiple word document one by one
  oDoc = oWA.Documents.Open(fileName, objMissing, objMissing, objMissing, 
   objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, 
    objMissing, objMissing, objMissing, objMissing, objMissing, objMissing)

Проблема иногда в том, что приложение зависает и перестает обрабатывать текстовые файлы. Затем я увидел два экземпляра Winword.exe в диспетчере задач -> Процесс. Когда я убиваю того, у кого меньше памяти, приложение запускается автоматически. Как создаются эти два экземпляра. Могу я это предотвратить? Для решения этой проблемы я создал функцию для уничтожения экземпляра winword.exe, но она не работает.

Private Function KillMultipleWord()

    Dim currentProcess As Process()
    currentProcess = System.Diagnostics.Process.GetProcessesByName("winword")
    If currentProcess.Length > 1 Then
        Dim totalBytesOfMemoryUsed As Long = 0
        Dim cmptotalBytesOfMemoryUsed As Long = 0
        Dim cmpProc As System.Diagnostics.Process = Nothing
        For Each proc As System.Diagnostics.Process In currentProcess
            totalBytesOfMemoryUsed = proc.WorkingSet64
            If cmptotalBytesOfMemoryUsed < totalBytesOfMemoryUsed Then
                If cmpProc IsNot Nothing Then
                    cmpProc.Kill()
                End If
                cmpProc = proc
                cmptotalBytesOfMemoryUsed = totalBytesOfMemoryUsed
            Else
                proc.Kill()
            End If
        Next
        cmpProc = Nothing
    End If
    KillMultipleWord = Nothing
End Function

Вам необходимо предоставить минимальный воспроизводимый пример. Опубликованный вами фрагмент кода не содержит функции «зацикливания», поэтому мы не можем точно определить, в чем проблема. Однако, скорее всего, вы вызываете New Word.Application на каждой итерации цикла. Вы должны вызвать его только один раз, перед циклом и циклом открытия документов - все в одном экземпляре Word.Application. Когда вы закончите работу с документом, обязательно закройте его и отпусти это. Когда вы закончите с Word.Application, не забудьте также выпустить его правильно. В противном случае ваш код никогда не будет работать правильно.

Cindy Meister 01.10.2018 12:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
372
1

Ответы 1

Вам нужно использовать

oDoc.Close()

после каждого документа, и

oWA.Quit()

когда вы закончите.

Другие вопросы по теме