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
ASP.NET 2.0 / 3.5 / 4.0
Thread.CurrentThread.Abort()
venerdì 26 ottobre 2007 - 14.23
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
memmo77
Profilo
| Expert
683
messaggi | Data Invio:
ven 26 ott 2007 - 14:23
Il mio problema è questo. Ho una funzione che ne richiama altre tutte gestite dallo stesso thread. Quando una di queste va in errore, sulla gestione dell'evento ho messo:
Thread.CurrentThread.Abort()
Questo fa si che andando alla sub o function successiva, vada direttamente sul:
Catch ex As ThreadAbortException
E questo fino a risalire alla prima funzione che ha fatto partire il tutto, solo non riesco a gestire l'errore come vorrei. In sostanza dovrei far comparire un messaggio che riporti l'errore. Che devo fare una volta risalito alla funzione chiamante?
Grazie
pozzoli.samuele
Profilo
| Senior Member
219
messaggi | Data Invio:
ven 26 ott 2007 - 16:33
>Il mio problema è questo. Ho una funzione che ne richiama altre
>tutte gestite dallo stesso thread. Quando una di queste va in
>errore, sulla gestione dell'evento ho messo:
>
>Thread.CurrentThread.Abort()
Domanda... Non dovrebbe terminare lo stesso, ilthread lanciando una eccezione riguardo a qual'è l'errore?
>
>Questo fa si che andando alla sub o function successiva, vada
>direttamente sul:
>
>Catch ex As ThreadAbortException
Che rileva solo l'eccezione di chiusura del thread.
Fai invece un
catch ex as exception
Così le trovi tutte!
>
>E questo fino a risalire alla prima funzione che ha fatto partire
>il tutto, solo non riesco a gestire l'errore come vorrei. In
>sostanza dovrei far comparire un messaggio che riporti l'errore.
Per questo ti basta mettere una roba così...
catch ex as exception
response.write(ex.message)
end try
>Che devo fare una volta risalito alla funzione chiamante?
Se vuoi fare una cosa più fine, puoi mettere, invece del response.writemessage, un select case e gestire tutte le varie eccezioni. Mettere una label nella pagina e scrivere qualcosa su quest'ultima.
>
>Grazie
>
>
Spero di aver capito e risolto. Altrimenti chiedi! :D
memmo77
Profilo
| Expert
683
messaggi | Data Invio:
ven 26 ott 2007 - 16:52
>Domanda... Non dovrebbe terminare lo stesso, ilthread lanciando una eccezione riguardo a qual'è l'errore?
L'errore non è un errore vero e proprio, serve a me di terminare il thread in alcune circostanze
>Che rileva solo l'eccezione di chiusura del thread.
>Fai invece un
>atch ex as exception
>Così le trovi tutte!
l'exception c'è per rilevare anche gli altrierrori
Per il messaggio non avrei problemi a stamparlo. Praticamente devo abortire il thread uscire da tutte le funzioni che questo gestisce (praticamente il thread fa partire una sub che ne chiama altre), e ricaricare la pagina. Non so se mi spiego. Comunque grazie
pozzoli.samuele
Profilo
| Senior Member
219
messaggi | Data Invio:
ven 26 ott 2007 - 17:59
OOOOOOOKEY...
Allora, cerco di vedere se questa volta ho capito.
>>Domanda... Non dovrebbe terminare lo stesso, ilthread lanciando una eccezione riguardo a qual'è l'errore?
>
>L'errore non è un errore vero e proprio, serve a me di terminare
>il thread in alcune circostanze
Quindi tu chiudi il thread.... Ma vuoi "ignorare" gli errori che avvengono all'interno? Oppure vuoi portarti fuori che errore è avvenuto?
>
>
>>Che rileva solo l'eccezione di chiusura del thread.
>>Fai invece un
>>atch ex as exception
>>Così le trovi tutte!
>
>l'exception c'è per rilevare anche gli altrierrori
>
>Per il messaggio non avrei problemi a stamparlo. Praticamente
>devo abortire il thread uscire da tutte le funzioni che questo
>gestisce (praticamente il thread fa partire una sub che ne chiama
>altre), e ricaricare la pagina. Non so se mi spiego. Comunque
>grazie
Cioè... Le funzioni sono lanciate dall sub? Ma comunque, nel thread, stai facendo un'operazione per volta, a meno che tu non lanci altri thread... Quindi non devi terminare tutte le funzioni, ma solo quella in esecuzione... che tra l'altro, se non sbaglio, quando chiudi il thread termina da sola.
Non è ben chiaro il meccanismo che vuoi implementare...
E non capisco, a questo punto, che messaggio vuoi portare fuori....
Non so, magari un esempio riesce a mettermi un goccio di svitol nelle arrugginite rotelline in testa...
memmo77
Profilo
| Expert
683
messaggi | Data Invio:
sab 27 ott 2007 - 08:31
>Quindi tu chiudi il thread.... Ma vuoi "ignorare" gli errori che avvengono all'interno? Oppure vuoi portarti fuori che errore è avvenuto?
Allora, il thread mi serve per lanciare una funzione che ne richiama altre tra le quali una (maledetta
) barra di progresso che mi fa vedere il progresso delle operazioni. Si potrebbero verificare, errori di tipo exception (che magari non ho calcolato), oppure potrei avere bisogno di generare un abort perchè magari il mio "utente" s'è dimenticato di fare qualcosa e quindi bloccare il thread, mettere in una session("errore"), il mio errore e alla fine stamparglielo a video. Quindi in sostanza io faccio:
Session("ERRORE") = "CONTATTA L'AMMINISTRATORE."
Thread.CurrentThread.Abort()
mi finisce nel ThreadAbortException e qui già non so che fargli visto che da questo, rivà a finire al ThreadAbortException della sub precedente che lo ha richiamato e poi "esplode". Invece nell' Exception se mai dovesse andarci dovrei anche li bloccare tutto e ho rimesso Thread.CurrentThread.Abort().
Catch ex As ThreadAbortException
??????????????
Catch e As Exception
catturaErrore = New GestioneErrore.ErrorLogger(Session("ffn"))
catturaErrore.AddExceptionThread(e)
storedReturn = -9999
Thread.CurrentThread.Abort()
End Try
Ti allego l'immagine di quello che avviene alla fine del tutto.
Grazie mille ciao
999x343
257Kb
pozzoli.samuele
Profilo
| Senior Member
219
messaggi | Data Invio:
sab 27 ott 2007 - 13:26
>Allora, il thread mi serve per lanciare una funzione che ne richiama
>altre tra le quali una (maledetta
) barra di progresso che
>mi fa vedere il progresso delle operazioni.
Fantastic....
>Si potrebbero verificare,
>errori di tipo exception (che magari non ho calcolato), oppure
>potrei avere bisogno di generare un abort perchè magari il mio
>"utente" s'è dimenticato di fare qualcosa e quindi bloccare il
>thread, mettere in una session("errore"), il mio errore e alla
>fine stamparglielo a video. Quindi in sostanza io faccio:
>
>Session("ERRORE") = "CONTATTA L'AMMINISTRATORE."
>Thread.CurrentThread.Abort()
Perfetto, in questo modo chiudi tuto, a meno che tu non lanci funzioni o sub in altri thread, ma abbiamo appurato che non è questo il caso.
>
>mi finisce nel ThreadAbortException e qui già non so che fargli
>visto che da questo, rivà a finire al ThreadAbortException della
>sub precedente che lo ha richiamato e poi "esplode".
Bhè... Perchè thread.abort, fa abortire il thread! Quindi come può andare a finire nel catch che hai messo sotto? Non ci arriverà mai, perchè uccidi il processo prima!
Il thread abort exception, puoi gestirlo solo da chi lo richiama, perchè quando lanci l'abort... Chiudi proprio il processo. Quindi chiudi anche ciò che ti può gestire l'exception... Non so se sono riuscito a spiegarmi. Probabilmente, leggendolo io non capirei...
> Invece nell'
>Exception se mai dovesse andarci dovrei anche li bloccare tutto
>e ho rimesso Thread.CurrentThread.Abort().
>
>Catch ex As ThreadAbortException
> ??????????????
>Catch e As Exception
>catturaErrore = New GestioneErrore.ErrorLogger(Session("ffn"))
> catturaErrore.AddExceptionThread(e)
> storedReturn = -9999
> Thread.CurrentThread.Abort()
>End Try
>
>Ti allego l'immagine di quello che avviene alla fine del tutto.
Perchè probabilmente non fai un catch della thread abort exception. A questo punto... ti chiederei... Chi gestisce l'ecezione che generi, quando uccidi il thread nell'ultimo catch e as exception? Risposta... ovviamente il chiamante. Lo stesso vale per il primo abort!
>
>Grazie mille ciao
>
Sperando di essere stato utile... e magari anche chiaro!
Cmq, per rissumere... se fai un
try
ChiamaThread(Param1, Param2)
catch e as thread abortexception
'Non faccio nulla, oppure...
response.write("Contatta l'amministratore")
catch e as exception
'Gestisco errori imprevisti
response.write("Siamo in C----A. Se fem?")
end try
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 !