C# et application tierce (MS-EXCEL) (résolu)

C# et application tierce (MS-EXCEL) (résolu) - C#/.NET managed - Programmation

Marsh Posté le 20-10-2006 à 14:13:20    

Bonjour,
 
Depuis mon programme en C#, j'arrive à lancer MS-Excel (non visible) et faire les traitements désirés. Je ferme l'application (cf. code) à priori correctement, cependant, le processus MS-Excel n'est pas arrêté... Il ne l'est que lorsque l'application est terminée...
 
Tout ceci ne serait pas génant si j'utilisais bien une application. Le problème est que ce bout de code se retrouve dans une tâche externe rattachée a une base de données et cette tâche n'est arrêtée que lorsque la base l'est. Du coup, en utilisation normale, je me retrouve avec XXX process MS-Excel  :(  
 

Code :
  1. using System;
  2. using Excel;
  3. namespace testExcel
  4. {
  5. /// <summary>
  6. /// Description résumée de Class1.
  7. /// </summary>
  8. class Class1
  9. {
  10.  /// <summary>
  11.  /// Point d'entrée principal de l'application.
  12.  /// </summary>
  13.  [STAThread]
  14.  static void Main(string[] args)
  15.  {
  16.   Excel.Application app = new Excel.ApplicationClass();
  17.   app.Visible = true;   // ou laisser la valeur par défaut pour ne pas montrer la fenêtre excel
  18.   int i = 0;
  19.   System.Threading.Thread.Sleep( 1000 );   // juste pour montrer qu'Excel s'ouvre bien comme il faut
  20.   app.Quit();
  21.   app = null;
  22.   while( i++ < 100 )
  23.    System.Threading.Thread.Sleep( 1000 );
  24.  }     // <-- On arrive ici et le processus Excel n'est toujours pas terminé...
  25. }
  26. }

PS : Ne pas oublier de référencer l'objet COM adéquat.


Message édité par bb138 le 23-10-2006 à 13:53:22
Reply

Marsh Posté le 20-10-2006 à 14:13:20   

Reply

Marsh Posté le 20-10-2006 à 17:50:41    

+1 (meme question pour moi)


---------------
ceci est un bloc de texte
Reply

Marsh Posté le 20-10-2006 à 22:48:38    

il ne faut pas oublier de libérer l'objet COM une fois qu'on n'en a plus besoin... c'est un objet COM, pas une assembly managée, donc c'est à toi de libérer la mémoire qu'il utilise.
ajoute la ligne suivante après app.Quit();

Code :
  1. System.Runtime.InteropServices.Marshal.ReleaseComObject(app);


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-10-2006 à 13:31:20    

Arf, je te remercie beaucoup !  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed