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
C# - Strano comportamento programma che usa ListView
venerdì 26 ottobre 2012 - 08.17
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 3.5
|
Windows 7
pixelpix
Profilo
| Newbie
4
messaggi | Data Invio:
ven 26 ott 2012 - 08:17
Il software che sto sviluppando in C# utilizzando SharpDevelop si comporta in un modo stranissimo. Cercherò di descriverlo brevemente anche se non sarà facile.
Ho una finestra in cui ho tre ListView. Cliccando su un pulsante, con un ciclo for riempo queste tre ListView con semplici stringhe di testo che arrivano da una List già popolata. Il riempimento e la visualizzazione non è immediata. Infatti io voglio che ogni riga venga visualizzata ogni tot millisecondi e per questo utilizzo la funzione System.Threading.Thread.Sleep.
Ebbene, quando eseguo il software facendolo partire all'interno dell'ambiente di sviluppo questo si comporta come voglio io senza alcun problema, mentre quando eseguo il software al di fuori, semplicemente facendo doppio click sull'eseguibile, quando premo il pulsante per far popolare e visualizzare il contenuto delle ListView, succede una cosa strana, ovvero le ListView cominciano a popolarsi e le righe compaiono a schermo secondo il ritardo da me impostato, poi ad un certo punto non definito il programma sembra come che si impalli... nelle listview non compare più nulla e l'unica cosa che vedo è il cursore del mouse che cambia facendomi capire che il programma sta lavorando. In effetti il programma non si è impallato, sta continuando ad eseguire le istruzioni e solo quando arriva al termine del ciclo for ritorna disponibile e come risultato ho le listview piene con tutte le stringhe. Il problema è che, per esempio, dalla stringa 10 alla 200 non le ho viste comparire sullo schermo come avrei voluto. Quale può essere la spiegazione di questo strano comportamento? Qualcuno ha qualche idea su come risolverlo?
Grazie
Vinsent
Profilo
| Senior Member
268
messaggi | Data Invio:
mer 31 ott 2012 - 21:27
Il problema stà nell' utilizzo dello sleep come "pausa". Se lo usi nel thread della form questa risulta bloccata per ogni intervallo dichiarato, inoltre a seconda delle prestazioni del pc la grafica può rimanere "indietro"...non so come spiegarlo meglio...comunque, per risolvere devi inserire una riga di codice: 'Application.DoEvents();', vedi qui:
http://msdn.microsoft.com/it-it/library/system.windows.forms.application.doevents
(v=vs.90).aspx#Y0
in modo che il programma "smaltisca" tutte le operazioni prima di continuare con il ciclo e la visualizzazione scorra come vuoi tu, comunque ti rimane il discorso del blocco della form, se gli sleep sono brevi e l' elaborazione è breve può anche andare bene...devi valutare tu.
Un metodo più consono, per non bloccare la form ed evitare problemi di visualizzazione, sarebbe quello di usare un Timer o ancora meglio un backgroundworker o thread separato che aggiorna i controlli della form tramite un delegato.
Ciao
pixelpix
Profilo
| Newbie
4
messaggi | Data Invio:
gio 8 nov 2012 - 13:56
Grazie mille per il suggerimento.
In effetti sospettavo anche io che la funzione Sleep avesse a che fare con il problema.
Ad ogni modo utilizzando Application.Doevents ho risolto tutti i problemi.
Quindi penso che non devo mettermi, almeno per ora, a studiare e capire cosa sono i backgroundworker e come usarli.
Grazie di tutto.
Ciao
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 !