Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
.NET Framework
Quali sono gli oggetti che ho instanziato nella mia window application...
venerdì 13 gennaio 2006 - 09.48
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
marina77
Profilo
| Newbie
3
messaggi | Data Invio:
ven 13 gen 2006 - 09:48
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
7.999
messaggi | Data Invio:
ven 13 gen 2006 - 12:20
>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
3
messaggi | Data Invio:
ven 13 gen 2006 - 12:34
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
Torna su
Stanze Forum
Elenco Threads
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 !