Chatch thread

giovedì 11 ottobre 2007 - 17.11

memmo77 Profilo | Expert

Salve. Nella mia applicazione c'è un thread che fa partire una serie di funzioni. La funzione che va in errore entra nel chat ma non riesco a farla fermare. Se lo abortisco, l'applicazione resta ferma li se lo sospendo idem. Come posso gestire questa situazione? Grazie a tutti

0v3rCl0ck Profilo | Guru

Ciao,

>Salve. Nella mia applicazione c'è un thread che fa partire una
>serie di funzioni. La funzione che va in errore entra nel chat
>ma non riesco a farla fermare.

Hai gestito i messaggi di stato delle funzioni eseguite nel thread, creandoti degli eventi (es.: OnBegin, OnEnd, OnError, OnProgress)?

>Se lo abortisco, l'applicazione
>resta ferma li se lo sospendo idem. Come posso gestire questa
>situazione? Grazie a tutti

I thread anche se abortiti non vengo terminati all'istante, attendono la fine dell'istruzione in corso e comunque devi fare attenzione perchè il Thread.Abort lancia un eccezzione sul thread invocato e per di più è una funzione al quanto pericolosa, perchè è un evento asyncrono e non sai in che momento del tuo codice viene eseguita, potrebbe succedere che se sei in input/output su di un file, quest'ultimo non venga mai più chiuso, se il thread.abort "passa" quando sei nel finally durante la chiusura del file, e ancora peggio se utilizzi delle dll unmanage, quest'ultime potrebbero non scaricarsi più; per gestire il blocco di un thread, io consiglio di crearti una proprietà o un metodo che setta un membro privato (es.: Abort), e gestirne il suo valore all'interno del ciclo stesso, se la variabile sarà True allora dovrai terminare la funzione corrente, in modo tale da scaricare la risorsa, e conseguentemente il thread verrà chiuso correttamente, inoltre prima di terminare la funzione suggerirei di lanciare un evento OnAbort, così nell'altro thread padre hai il massimo controllo di quello che sta succedendo al thread in questione.

Enjoy It
http://blogs.dotnethell.it/Regulator/
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