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)からインターフェイスを解放します。これにより、破損またはデータ損失が発生する可能性があります。この問題を回避するには、アプリケーションがそれらの内部に存在するCOMコンポーネントを表すRuntimeCallableWrappersで完全に完了するまで、すべてのコンテキスト/アパートメントが存続していることを確認してください。

ここに画像の説明を入力してください

どうすればそれを理解できますか?

4

0 に答える 0