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

  • Official Android Tips

    Official And

    23 EYLÜL 2009
  • Dive In

    Dive In

    17 Temmuz 2013
  • InsideBlackBerry

    InsideBlackB

    14 Aralık 2009