SORU
1 EKİM 2008, ÇARŞAMBA


Nasıl düzgün Excel, birlikte çalışabilirlik nesneleri temizlemek için

C Excel birlikte çalışabilirlik kullanıyorum# (ApplicationClass) ve son olarak yan benim: aşağıdaki kodu yerleştirmiş

while (System.Runtime.InteropServices.Marshal.ReleaseComObject(excelSheet) != 0) { }
excelSheet = null;
GC.Collect();
GC.WaitForPendingFinalizers();

Bu tarz eserlerin rağmen EXCEL.EXE süreci ben Excel kapatın sonra bile hala arka planda. Benim uygulama el ile kapatıldığında yalnızca serbest.

Herkes yanlış ne yapıyorum farkında, ya da birlikte çalışma nesneleri düzgün bir şekilde bertaraf edilmesini sağlamak için bir alternatif vardır.

CEVAP
1 EKİM 2008, ÇARŞAMBA


Excel uygulaması hala COM nesneleri için başvurular tutuyor çünkü istifa etmez.

Bir değişkene atamadan COM nesnesinin en az bir üye çağırma olduğunu tahmin ediyorum.

Benim için olduexcelApp.Çalışmaben doğrudan atamadan kullanılan bir nesne değişkeni:

Worksheet sheet = excelApp.Worksheets.Open(...);
...
Marshal.ReleaseComObject(sheet);

Bu dahili C bilmiyordum ne# sabahlık yarattıÇalışmaCOM kodumu bunun farkında değildim çünkü) tarafından yayımlanan almamış olan nesne ve Excel kaldırılmış değildi neden neden oldu.

Ayrıca C COM nesnelerinin kullanımı için güzel bir kural vardır this page, sorunuma çözüm buldum#:

Hiç com nesneleri ile 2 nokta kullanın.


Bu bilgi ile yukarıdaki işi yapmak için doğru yoldur:

Worksheets sheets = excelApp.Worksheets; // <-- the important part
Worksheet sheet = sheets.Open(...);
...
Marshal.ReleaseComObject(sheets);
Marshal.ReleaseComObject(sheet);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alan Fullmer

    Alan Fullmer

    3 EYLÜL 2010
  • Paulo Bautista

    Paulo Bautis

    21 Aralık 2008
  • SegaAmerica

    SegaAmerica

    5 Mart 2008