Nello script #440 si è visto come far eseguire operazioni al server senza che l'utente debba aspettare l'avvenuta esecuzione dell'operazione.
I delegates offrono un metodo rapido e semplice, ma ne esiste un che da' il medesimo risultato e offre maggiori potenzialità di controllo.
Basta utilizzare il namespace System.Threading ed in particolare la classe Thread.
Ecco un piccolo esempio:
<%@ Page debug="true" %>
<%@ Import namespace="System.IO" %>
<%@ Import namespace="System.Text" %>
<%@ Import namespace="System.Threading" %>
<script runat="server">
Private Sub Funzione()
ScriviFile("inizio")
'fermo il thread temporaneamente per 10 secondi
Thread.Sleep(10000)
ScriviFile("fine")
End Sub
Private Sub ScriviFile(ByVal filename as String)
'scrive su un file l'ora in cui avviene
'l'inizio e la fine della nostra funzione
'correggere il percorso del file
Dim file as New FileStream("C:\Inetpub\wwwroot\prove\thread\" & filename & ".txt",FileMode.Create)
Dim data as Byte()=Encoding.Ascii.GetBytes(DateTime.Now)
file.Write(data,0,data.Length)
file.Close
End Sub
Private Sub Page_Load(Sender as object, e as EventArgs)
Dim t as New Thread(AddressOf Funzione)
t.Start()
End Sub
</script>Prova metodo in un nuovo thread
Nell'esempio, appena sia avvia l'elaborazione della pagina viene creato un nuovo Thread mediante il suo costruttore che accetta un puntatore alla nostra funzione (in C# in mancanza di addressOf si usa la classe ThreadStart).
Per mezzo del metodo Start avviamo il thread con le relative istruzioni. A differenza delle chiamate asincrone il thread una volta eseguita la procedura esce e viene terminato.
Questo strumento è molto potente, perché possiamo tramite la variabile t mantenere il riferimento al thread anche tra più postback o tra più utenti e di conseguenza accedere alle sue proprietà e metodi. Possiamo infatti attendere con il metodo Join che il nuovo thread finisca prima di andare avanti con il thread principale, sospenderlo con Suspend, interromperlo definitivamente con Abort, addormentarlo per un tot di secondi con Sleep, impostare la sua priorità e sapere qual è il suo stato con la proprietà ThreadState.
Questo è solo un accenno sulle funzionalità multithreading che .NET offre. Sebbene non sia possibile passare dei parametri alla funzione faccio notare che le variabili sono visibili per tutti i Thread che creiamo. Occorre quindi prestare attenzione nell'accedere contemporaneamente ad una variabile perché potremmo avere dei risultati diversi da quelli che attendiamo. In questo caso bisogna procedere alla sincronizzazione delle istruzioni.
- #947 - La direttiva OutputCache con ASP.NET 2.0 e 3.5
- The Developer Highway Code
- #949 - Un custom control BoundField con dropdownlist
- #946 - Attributi per il supprto a design time di custom control con ASP.NET
- MailWebEventProvider perche sei public e abstract
- Realizzare un controllo custom in ASP.NET AJAX - Prima parte
- Speciale per il lancio di Visual Studio 2008, SQL Server 2008 e Windows Server 2008 dal 25/02 al 07/03
- #937 - Personalizzare il contenuto del profilo con l'evento Personalize
- uno snippet per inserire riga di commento
- #939 - Un ExpressionBuilder di ASP.NET per recuperare le immagini all'interno del tema corrente
- #944 - Inviare file di grandi dimensioni con un HttpHandler di ASP.NET
- #910 - Incrementare le performance di ASP.NET rimuondo gli HttpModule non necessari
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.








Stampa
Snippet
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!