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

  • booba1234

    booba1234

    22 Temmuz 2006
  • Chriselle Lim

    Chriselle Li

    26 Ocak 2008
  • PaulGBelliveau

    PaulGBellive

    5 Mart 2009