2011-10-14 15 views
8

C'è un modo per mettere in pausa tutti i comandi di aggiornamento UI in Winforms?Posso congelare il mio rendering dell'interfaccia utente mentre il mio modulo viene caricato?

Oppure ho la sensazione che sto provando a fare questo in modo completamente sbagliato, quindi c'è un altro modo per aggirare il mio problema: fondamentalmente carico uno stato salvato di un controllo, che carica su di esso nuovi controlli. Tuttavia, faccio parte di questo nel thread dell'interfaccia utente e alcuni dei dati che vengono caricati da un altro thread, che quindi riempie l'interfaccia utente.

Così l'effetto che ho quando si sta caricando è che l'utente può vedere alcuni dei controlli che appaiono in un unico luogo, per poi passare ad un altro posto sul modulo, modifica dei valori, ecc

mi piacerebbe piace avere una schermata di caricamento invece di questa e caricare i controlli in background. È piuttosto una grande applicazione e non è così importante, quindi ridisegnare il mio codice non è davvero un'opzione.

Posso semplicemente interrompere tutti i comandi Update() su un controllo mentre un metodo è in esecuzione?

+0

mio suggerimento - non forma spettacolo mentre la sua resa. Se si blocca l'interfaccia utente, l'utente può visualizzare il modulo vuoto e dopo un po 'di tempo vengono visualizzati tutti i controlli. – Reniuz

+0

Va bene, scusa, non ho spiegato questo bit. Il modulo predefinito contiene una versione vuota di questo controllo e quindi l'utente può trascinare i controlli intorno e selezionare alcune opzioni, aggiungere nuovi controlli, ecc., Quindi salvare lo stato del controllo in XML. Questa domanda è per quando l'utente decide di aprire un file esistente. – Connell

risposta

12

È possibile utilizzare i metodi SuspendLayout e ResumeLayout per eseguire il wrapping dell'impostazione dell'interfaccia utente in un'unica operazione (senza l'aggiornamento del rendering).

Fondamentalmente (supponendo SomeMethod è nella classe del form):

private void SomeMethod() 
{ 
    this.SuspendLayout(); 
    // all UI setup 
    this.ResumeLayout(); 
} 
+1

Brillante, sapevo che sarebbe stato qualcosa di semplice, stavo solo cercando su Google le cose sbagliate che sembra. Grazie! – Connell

+0

Sfortunatamente non funziona mentre la Forma è già visibile. C'è un modo migliore: http://stackoverflow.com/questions/13711812/parallel-generation-of-ui/15020157#15020157 –

4

in realtà dipende la tua logica forma, in generale, non si dovrebbe sovraccaricare il metodo Load o Show con le cose troppo in modo che la forma può essere mostrati e disegnati rapidamente e avere sempre un aspetto reattivo.

in alcuni casi potrebbe aiutare a usare il SuspendLayout e metodi ResumeLayout, vedere qui: Control.SuspendLayout Method

+0

Non è sul carico. Il caricamento del controllo è inizialmente nel codice del designer, che carica un controllo vuoto, come tale. Ma c'è un metodo LoadData sul controllo che sta caricando lo stato del modulo da un file XML dopo che all'utente viene richiesto di aprire un file. – Connell

Problemi correlati