2015-04-11 3 views
1

Когда пользователь нажимает кнопку, он открывает документ Word. После того, как пользователь закроет документ, Word все еще работает в фоновом режиме (подтверждено диспетчером задач). Есть ли способ очистить Word из памяти?VB.net Word не закрывается

Это то, что мой код Токи выглядеть следующим образом:

Private Sub UserDocumentationToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UserDocumentationToolStripMenuItem.Click 
     Dim appWord As New Word.Application 
     Dim docWord As New Word.Document 

     docWord = appWord.Documents.Open(Application.StartupPath & "\user_documentation1.docx",) 
     appWord.Visible = True 
     appWord.Activate() 

    End Sub 
+0

'appWord.Quit()'? – har07

+0

Duplicate of [Disposing of Microsoft.Office.Interop.Word.Application] (http://stackoverflow.com/questions/6777422/disposing-of-microsoft-office-interop-word-application) –

ответ

0

Вы можете перемещать Dim appWord As New Word.Application вне подлодки, а затем вызвать appWord.Quit() из другого подразделам в более позднее время.

1

Необходимо правильно закрыть объект Com, после вызова .Quit вам понадобится класс Marshall. Проверьте Task Manager, и вы увидите, что он ушел. То же самое для Excel.

Marshal.FinalReleaseComObject(appWord) 
+0

К сожалению, ни один из них не казался работа для меня. Слово все еще работает в фоновом режиме. Спасибо за помощь до сих пор, ребята! – user3400168

+0

Я раньше работал с Word. Этот метод работает только один? Убедитесь, что все предыдущие процессы закрыты, и повторите попытку. Выйти в одиночку не получится. – OneFineDay

0

Попробуйте это.

Внешние блоки: метод

Private appWord As Word.Application 
Private docWord As Word.Document 

Внутри обработчика событий:

Private Sub UserDocumentationToolStripMenuItem_Click(sender As Object, e As EventArgs) _ 
Handles UserDocumentationToolStripMenuItem.Click 

    Me.appWord = New Word.Application 
    Me.docWord = New Word.Document 

    Me.docWord = Me.appWord.Documents.Open(Application.StartupPath & 
              "\user_documentation1.docx",) 
    Me.appWord.Visible = True 
    Me.appWord.Activate() 

End Sub 

В обработчике FormClosing события или где-нибудь еще:

Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) _ 
Handles MyBase.FormClosing 

    Me.appWord.Quit() 

End Sub 
0

У меня была аналогичная проблема, и решение было в два раза. Во-первых, я использовал свой собственный эквивалент appWord.Quit() для завершения программы. Обратите внимание, что, если вы не хотите, чтобы конечный пользователь запрашивал, сохранять ли изменения, вам необходимо указать параметр для метода .Quit. Примерно так: appWord.Quit(Word.WdSaveOptions.wdDoNotSaveChanges).

Во-вторых, я нашел удобный Sub онлайн для полного выпуска любых объектов автоматизации Word или Excel и изменения его в соответствии с моими потребностями.

Попробуйте вызвать этот Sub после appWord.Quit(Word.WdSaveOptions.wdDoNotSaveChanges):

Public Sub releaseObject(ByVal obj As Object) 
    Try 
     Dim CheckIt As Integer 
     CheckIt = System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) 
     While CheckIt > 0 
      CheckIt = System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) 
     End While 
     obj = Nothing 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    Finally 
     GC.Collect() 
     GC.WaitForPendingFinalizers() 
    End Try 
End Sub 

Этот подраздел перебирает, чтобы убедиться, что все экземпляры и объекты полностью закрыты и удалены из памяти.

Надеюсь, что это поможет!

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