Thread non funzionante.

venerdì 04 settembre 2009 - 11.49

Ciunino Profilo | Newbie

Ciao a tutti,
scusate il titolo ma non saprei come spiegarlo meglio... Vi spiego subito il mio problema.
Ho una form banale banale con un bottone che mi fa partire un thread che esegue una procedura in cui ho un delegate per popolarmi dei controlli sulla mia form.

Il codice di per sè viene eseguito correttamente in tutto e per tutto, l'unico problema (e non riesco proprio a capire perchè) è che il thread che vado a creare non si "sgancia" da quello principale, cioè la form mi si blocca in attesa della fine dell'esecuzione del thread. (Ho fatto la prova mettendo il classico pulsante che ti da un messaggio, ma per il motivo di sopra non riesco a premerlo).

Ad essere onesti è anche pochino che mi cimento con l'argomento, qualcuno sa mica darmi una dritta su dova sbaglio?

Grazie 1000 a tutti!

A grandi linee il mio codice è il seguente...

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

tonyexpo Profilo | Senior Member


ciao

il tuo problema è che anche settando il thread com isbackground=true, questo non avviene realmente perchè tutti i thread creati in quel modo sono sempre in foreground e poichè non hai invocato manualmente l'abort del thread prima della chiusura del form l'eseguibile ti rimane in memoria e attivo


per creare un thread in background (l'esecuzione non mantiene attivo l'eseguibile) devi utilizzare la classe statica ThreadPool e invocare il metodo QueueUserWorkItem.


Antonio Esposito
MCTS .NET 3.5 WCF
MCTS .NET 3.5 Windows Forms
MCTS .NET 2.0 Distributed applications
MCP

Ciunino Profilo | Newbie

Ciao, grazie per la risposta... ammetto la mia ignoranza sulla classe threadpool... (hai mica qualche esempio banale?)

alla fine però smanettando un po' ho risolto in questa maniera (anche se non vedo la differenza rispetto a prima, se tu vedi una differenza riesci mica a spiegarmela?)

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

dove PROVA è una funzione che esegue un ciclo for incrementando un valore generando ogni volta un evento (tanto per vedere i numeri che girano).

In ogni caso grazie.

tonyexpo Profilo | Senior Member


nel tuo caso stai usando un puntatore (evento) ecco perchè non hai più il problema.. ma non è una soluzione molto carina



ti scrivo degli esempi ;)
così si scrive correttamente sulla form da un thread

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

in questo modo usi un thread in foreground, ma lo distruggi alla chiusura del form.

in alternativa puoi usare i thread in background:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

così facendo non ha bisogno di distruggere il thread, perchè alla chiusura dell'applicazione il threadpool lo distruggerà per te

bye
Antonio Esposito
MCTS .NET 3.5 WCF
MCTS .NET 3.5 Windows Forms
MCTS .NET 2.0 Distributed applications
MCP

Ciunino Profilo | Newbie

Grande!! Grazie 1000 per le spiegazioni!
Ne farò tesoro!

Ciao.
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