Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Refresh Form
Forum - C# / VB.NET - Refresh Form

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
systemgvp (Normal User)
Expert


Messaggi: 296
Iscritto: 14/04/2008

Segnala al moderatore
Postato alle 14:50
Mercoledì, 04/08/2010
Salve,

devo creare un'applicazione che mostra sul form (WPF) i cambiamenti di colore di
alcuni rettangoli.

Il problema e che all'avvio dell'evento mi mostra solo l'ultimo stadio perchè troppo
veloce. In Delphi usavo la procedura Application.ProcessMessage che mostrava i cambiamenti di stato ogni volta che me mi serviva, facendo quindi un refresh del form.

Come posso risolvere?

esiste poi in c# una funzione Sleep(xxx) o qualcosa di simile che blocca i processi per qualche istante?

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:19
Giovedì, 05/08/2010
System.Threadind.Thread.Sleep(x)
Blocca tutto il thread, quindi, nel thread principale, anche tutta l'applicazione.

PM Quote
Avatar
systemgvp (Normal User)
Expert


Messaggi: 296
Iscritto: 14/04/2008

Segnala al moderatore
Postato alle 15:22
Giovedì, 05/08/2010
e per il refresh?

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:00
Venerdì, 06/08/2010
Come?

PM Quote
Avatar
systemgvp (Normal User)
Expert


Messaggi: 296
Iscritto: 14/04/2008

Segnala al moderatore
Postato alle 13:34
Venerdì, 06/08/2010
per aggiornare i cambiamenti avvenuti sul form

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 13:52
Venerdì, 06/08/2010
Se proprio vuoi, Application.DoEvents...

PM Quote
Avatar
systemgvp (Normal User)
Expert


Messaggi: 296
Iscritto: 14/04/2008

Segnala al moderatore
Postato alle 21:16
Venerdì, 06/08/2010
non c'è in WPF, ma ho trovato la soluzione con

NomeDelForm.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Render, EmptyDelegate);
System.Threading.Thread.Sleep(500);
NomeDelForm.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Render, EmptyDelegate);

e definendo la variabile

private static Action EmptyDelegate = delegate() { };

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:12
Sabato, 07/08/2010
Hai semplicemente detto di non eseguire nulla con priorità pari a quella del rendering. Quegli Invoke non dovrebbero modificare alcunchè. Almeno metti nel delegato qualcosa del tipo Update, Refres o Invalidate.

PM Quote
Avatar
systemgvp (Normal User)
Expert


Messaggi: 296
Iscritto: 14/04/2008

Segnala al moderatore
Postato alle 13:51
Sabato, 07/08/2010
forse non capisco perchèè da poco che mi sono affacciato sul c#.

comunque a me serve solo qualcosa che mi aggiorni i cambiamenti avvenuti sul form

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo