-1

このコードを使用して Excel レポートを作成しています。

 var excel = new Excel.Application();
 foreach (var report in m_reports)
     report.PrintReport(excel.Workbooks.Add().Sheets.Add());
 excel.Visible = true;

すべて正常に動作します。ただし、ユーザーが手動で Excel を閉じても、Excel プロセスはタスク マネージャーで開いたままになります。なんで?

4

2 に答える 2

3

ComObjectsのリリースについて MSDN を参照してください。

System.Runtime.InteropServices.Marshal.ReleaseComObject( excel );

また、その foreach ループ内で何か他のことをしたい場合は、コードを適切なコード ブロック形式でラップすることをお勧めします。

 foreach (var report in m_reports)
 {
    report.PrintReport(excel.Workbooks.Add().Sheets.Add());
 }
 excel.Visible = true;
 //Release the ComObject
 System.Runtime.InteropServices.Marshal.ReleaseComObject( excel );
于 2012-11-30T01:16:07.410 に答える
1

この答えには良いルールがあります: Excel相互運用オブジェクトを適切にクリーンアップするにはどうすればよいですか?

「comオブジェクトで2つのドットを使用しないでください。」

ワークブックとシートオブジェクトをリリースせずに宣言しているので、プロセスは終了しません。

于 2012-11-30T01:00:31.583 に答える