Pourquoi Microsoft.Office.Interop.Excel.Application.Quit () laisse le processus d'arrière-plan en cours d'exécution?
Le code suivant feuilles Microsoft Excel processus d'arrière-plan en cours d'exécution, jusqu'à ce que après mon programme s'est terminé:
var excelApplication = new Application();
var workbooks = excelApplication.Workbooks;
var workbook = excelApplication.Workbooks.Open(file.FullName);
workbook.Close();
excelApplication.Workbooks.Close();
excelApplication.Quit();
Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(workbooks);
Marshal.ReleaseComObject(excelApplication);
Pourquoi? Ce qui me manque?
source d'informationauteur skinnysoftware
Vous devez vous connecter pour publier un commentaire.
Obtenu!
application.Des classeurs != application.Classeurs
Cette propriété n'expose pas une variable, il génère une valeur. Donc, à chaque fois ai-je accès à des Classeurs des biens-je créer un nouvel objet COM.
J'ai corrigé le code et tout est bien. Merci, tout le monde.
C'est une très répandu problème avec les applications Office. Tous les compléments Excel/les applications d'automatisation doit systématiquement la libération de leurs références à des objets Excel quand ils ne sont plus nécessaires. À défaut systématique de la libération de référence pour les objets Excel peut empêcher Microsoft Office Excel de s'arrêter correctement. Voir Systématiquement Libérant Des Objets pour plus d'informations. Il est lié à Outlook, mais les mêmes principes peuvent être appliqués à toutes les applications Office.
Utilisation Du Système.Moment de l'exécution.InteropServices.Maréchal.ReleaseComObject de libérer un objet Excel lorsque vous avez fini de l'utiliser. Ensuite, définir une variable pour Nothing en Visual Basic (null en C#) pour libérer la référence à l'objet.
C'EST une MAUVAISE MANIÈRE DE FAIRE COMME CECImais c'est plus de moyen facile de résoudre le problème:
tous vous avez besoin est d'initialiser toutes les variables non initialisées lorsque vous devez travailler avec elle, et de l'appeler CloseExcelApp() lorsque vous devez fermer l'application.