2

Excel相互運用機能を使用していますが、呼び出すたびにプロセスが作成されているようです

new Microsoft.Office.Interop.Excel.Application()

そして、私が電話してもプロセスを終了することはありません

xlApp.Quit();

プロセスを終了するにはどうすればよいですか?

4

3 に答える 3

3

すべての参照をリリースしていますか?(つまり、そもそもそれらを保存する必要があります)。

たとえば、Excelのinterop()からの私の処分には次のようなものがあります。

    public void Dispose()
    {
        if(!this.disposed)
        {
            if(cell != null)
                Marshal.FinalReleaseComObject(cell);

            if(cells != null)
                Marshal.FinalReleaseComObject(cells);

            if(worksheet != null)
                Marshal.FinalReleaseComObject(worksheet);

            if(worksheets != null)
                Marshal.FinalReleaseComObject(worksheets);

            if (workbook != null)
            {
                workbook.Close(false, Type.Missing, Type.Missing);
                Marshal.FinalReleaseComObject(workbook);
            }

            Marshal.FinalReleaseComObject(workbooks);
            xlApp.Quit();
            Marshal.FinalReleaseComObject(xlApp);

            GC.Collect();
            GC.WaitForPendingFinalizers();

            disposed = true;
        }
    }

(これが完璧かどうかはわかりませんが、私にとってはうまくいきました!)

于 2010-09-28T14:58:09.187 に答える
1

使用済みのCOMオブジェクトを解放しないと、Excelは終了しません。

この回答は、より多くの情報を提供するはずです。

于 2010-09-28T14:57:29.373 に答える
0

ほとんどの場合、これは、ドキュメントを変更し、Excelが保存を待機しているために発生します。次のようなものを試してください:

ObjWorkBook.Close(Microsoft.Office.Interop.Excel.XlSaveAction.xlDoNotSaveChanges, 
    Type.Missing, Type.Missing);

やめる前に

于 2010-09-28T14:58:14.240 に答える