使用後にExcelオブジェクトを解放しようとしています。これが私のコードです:
Excel._Application app = new Excel.Application();
Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
Excel._Worksheet worksheet = null;
app.Visible = true;
worksheet.Cells[1, 1] = "test string";
workbook.SaveAs("C:\testfile.xlsx");
object misValue = System.Reflection.Missing.Value;
workbook.Close(true, misValue, misValue);
app.Quit();
releaseObject(worksheet);
releaseObject(workbook);
releaseObject(app);
私のreleaseObjectメソッド:
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
MessageBox.Show("Unable to release the Object " + ex.ToString());
}
finally
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
デバッガーが初めてreleaseObjectに入ると、最初の「GC.WaitForPendingFinalizers();」でエラーが発生します。ライン:
コンテキスト0xdf76a0'は切断されています。現在のコンテキスト(コンテキスト0xdf7450)からインターフェイスを解放します。これにより、破損またはデータ損失が発生する可能性があります。この問題を回避するには、アプリケーションがそれらの内部に存在するCOMコンポーネントを表すRuntimeCallableWrappersで完全に完了するまで、すべてのコンテキスト/アパートメントが存続していることを確認してください。
どうすればそれを理解できますか?