Quali sono gli oggetti che ho instanziato nella mia window application...

venerdì 13 gennaio 2006 - 09.48

marina77 Profilo | Newbie

salve...
sono relativamente nuova nella programmazione con .NET.

Sto ultimamente litigando con una window application and Excel.
Alcuni di voi saranno al corrente del problema dell'oggetto excel che se non e' correttamente rilasciato(System.Runtime.InteropServices.Marshal.Release) rimane attivo nel task manager.

Sono riuscita a gestire questo "problema" ma nel caso di eccezione vorrei rilasciare tutti gli oggetti COM che ho creato(workbooks, worksheet etc..etc..) in una botta.
C'e' il modo di ricavare una collection di tutti gli oggetti che al momento sono instanziati dalla window application?forse c'e qualcosa nella syste.Reflection?

Grazie
Marina

Brainkiller Profilo | Guru

>Alcuni di voi saranno al corrente del problema dell'oggetto excel
>che se non e' correttamente rilasciato(System.Runtime.InteropServices.Marshal.Release)
>rimane attivo nel task manager.

Non è un problema, è normale che funzioni così, se non chiudi (non ricordo se c'è il metodo Exit o Quit) le istanze create di Excel rimane il processo attivo nel Task Manager.

>Sono riuscita a gestire questo "problema" ma nel caso di eccezione
>vorrei rilasciare tutti gli oggetti COM che ho creato(workbooks,
>worksheet etc..etc..) in una botta.
>C'e' il modo di ricavare una collection di tutti gli oggetti
>che al momento sono instanziati dalla window application?forse
> c'e qualcosa nella syste.Reflection?

La vedo molto ostica questa soluzione. Probabilmente è possibile. Io ti consiglio però di utilizzare una Helper Class ossia una classe con metodi statici (richiamabili senza istanziare la classe stessa) che ti consentono di gestire l'uso di Excel. Esempio un metodo Init() potrebbe crearti la nuova istanza di Excel, creare un nuovo sheet e ritornarti l'istanza adesso. Nel codice poi tu lavori come ti pare e piace, aggiungendo i dati ai fogli, ecc.ecc.
Alla fine richiami il metodo Close() (che scrivi sempre tu nella Helper Class) che ti chiude gli worksheet, il file, e chiude l'istanza di Excel.

In questo modo centralizzi le operazioni e sai che se c'è qualche problema di inizializzazione o chiusura devi andare a verifiacre in Init() o Close(). Un altro beneficio è che poi questa classe la puoi usare per altri progetti.

I nomi Init e Close sono di fantasia puoi usare ciò che ti piace.


David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

marina77 Profilo | Newbie

mmhhh....
purtroppo il semplice quit dell'oggetto application non funziona(vedi: http://msdn.microsoft.com/library/en-us/odc_of2003_bk/html/OfficeInteroperabilityCh2.asp?frame=true&_r=1)

Aavevo pensato anche ad un piano B, cioe' fare il kill del processo di excel che viene creato ma il il project manager ho storto il naso... il kill del processo e' da considerare affidabile o e' l'ultimo scoglio a cui aggrapparsi e non e' consigliato??

Grazie

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5