我试图在使用 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)中释放接口。这可能会导致损坏或数据丢失。为避免此问题,请确保所有上下文/单元都保持活动状态,直到应用程序完全使用 RuntimeCallableWrapper 完成,这些 RuntimeCallableWrapper 代表生活在其中的 COM 组件。
我怎样才能弄清楚?