1

私のアプリケーションとExcelファイルの両方が閉じられるまで、私のEXCEL * 32プロセスが使用されたままになる理由を理解しようとしています。作成後に何か不足しているに違いありません。アプリケーションがこのコードの後に​​ EXCEL *32 リソースを保持しているようです。エクスポート操作が完了した後に「手放す」ようにするための提案はありますか?

また、新しく作成した Excel シートを閉じたくありません。実際の .net アプリケーションに関連して使用されているリソースを解放したいだけです。

Application xls = new Application();
xls.SheetsInNewWorkbook = 1;

// Create our new excel application and add our workbooks/worksheets
Workbook Workbook = xls.Workbooks.Add();
Worksheet CrossoverPartsWorksheet = xls.Worksheets[1];

// Create our new excel application and add our workbooks/worksheets
Workbook Workbook = xls.Workbooks.Add();
Worksheet CrossoverPartsWorksheet = xls.Worksheets[1];

/////////////////////////////////////////
// < DO EXCEL EXPORT OPERATIONS HERE > //
/////////////////////////////////////////

// Release our resources.
Marshal.ReleaseComObject(Workbook);
Marshal.ReleaseComObject(CrossoverPartsWorksheet);
Marshal.ReleaseComObject(xls);
4

2 に答える 2

2

あなたが書くとき

Workbook Workbook = xls.Workbooks.Add();

CLR はRCW (Runtime Callable Wrapper) オブジェクトだけでWorkbookなく Workbooks コレクションにも作成します (Add()メソッドに使用されるオブジェクトが必要なので)。また、CLR が RCW オブジェクトを作成し、参照を保持しない場合は、ファイナライズできません。

したがって、主なルールは次のとおり です。二重ドット呼び出し式を避ける必要があります

var workbooks = xls.Workbooks;
var workbook = workbooks.Add();

Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(workbooks);
于 2013-09-05T17:36:16.863 に答える