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

  • BMG Rentals Property Management

    BMG Rentals

    23 Mayıs 2011
  • iMasterful

    iMasterful

    11 EYLÜL 2009
  • Jared Busch

    Jared Busch

    25 Mayıs 2011