0

我试图在使用 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 组件。

在此处输入图像描述

我怎样才能弄清楚?

4

0 回答 0