Почему Word не освобождает мой файл после вызова метода Close () в документе? - PullRequest
1 голос
/ 17 ноября 2009

Я использую MS Word COM API для печати документов Word из C #. Смотри ниже ...

    internal void PrintWordFileUsingDefaultPrinter(System.IO.FileInfo file)
    {
        //Open the document.
        object fileName = file.FullName;
        Document doc = app.Documents.Open(
            ref fileName, 
            ref missing, 
            ref trueValue, 
            ref falseValue, 
            ref missing, 
            ref missing, 
            ref missing, 
            ref missing, 
            ref missing, 
            ref missing, 
            ref missing, 
            ref missing, 
            ref missing, 
            ref missing, 
            ref missing, 
            ref missing);

        //Send print job to the printer.
        doc.PrintOut(
            ref trueValue,
            ref falseValue,
            ref missing,
            ref missing,
            ref missing,
            ref missing,
            ref missing,
            ref missing,
            ref missing,
            ref missing,
            ref missing,
            ref missing,
            ref missing,
            ref missing,
            ref missing,
            ref missing,
            ref missing,
            ref missing);

        doc.Close(ref falseValue, ref missing, ref missing);

    }

Вы увидите, что я закончу с вызовом doc.Close (). Однако даже после вызова этого Word все еще блокирует мой файл, и я не могу обрабатывать его дальше. Любая идея, как я могу заставить слово освободить мой файл?

(Помимо закрытия самого процесса Word? Я не хочу этого делать, поскольку мне нужно напечатать ОГРОМНОЕ количество документов и предпочесть не открывать Word каждый раз)

Ответы [ 3 ]

0 голосов
/ 17 ноября 2009

Вы уверены, что это не фоновая печать? Если это так, вы можете сказать, чтобы печатать синхронно. Отключение печати разблокирует файл при закрытии?

0 голосов
/ 17 ноября 2009

Вам нужно будет вызвать Marshal.ReleaseComObject для экземпляра документа, чтобы иметь возможность его освободить.

например. Marshal.ReleaseComObject(doc);

Вам также потребуется освободить экземпляр Word.Application, чтобы освободить экземпляр приложения Word из памяти.

0 голосов
/ 17 ноября 2009

Можете ли вы попытаться установить для объекта doc значение null после завершения его обработки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...