prega di dare un'occhiata al seguente codice:Utilizzando Application.Run() su diversi thread
var splashForm = new SplashForm();
m_Thread = new Thread(() => System.Windows.Forms.Application.Run(splashForm))
m_Thread.Start();
// Do some initialization
// ...
// the following method just invokes `Close()` on the right thread
splashForm.Shutdown();
// Loop until the thread is no longer alive
// ...
System.Windows.Forms.Application.Run(mainForm);
Sembra come se tutto funziona benissimo: prima vedo lo splashscreen, poi il MainForm viene avviato. Ma in qualche modo ottengo strani errori, come: elementi grafici (una ProgressBar senza fine) non vengono visualizzati correttamente.
MODIFICA: Ho due barre di avanzamento, una sullo splashscreen, sulla mainform. Entrambi mostrano lo stesso comportamento (sbagliato) in modalità infinita: nessun progresso, solo lo sfondo puro. /EDIT
A mio parere questo è dovuto alla chiamata di Application.Run()
su fili diversi. Questi errori possono essere eliminati chiamando qualsiasi funzione/proprietà del mainForm prima di iniziare la splashscreen - come, per esempio
mainForm.Text = mainForm.Text;
Qualcuno può confermare che questo codice può causare problemi - o che dovrebbe comportarsi bene e non ho cercare l'errore da qualche altra parte?
Ho già cercato implementazioni di splashscreen e so che può essere fatto in modo diverso. Ma sono interessato a capire questa implementazione e i suoi possibili problemi. Grazie!
I barre di avanzamento possono essere un po 'speciali, dal momento che possono eseguire il proprio thread per eseguire questa operazione. Puoi isolare e descrivere cosa succede? Come usare un PB bloccato, aggiungere un PB con valore = 50 ecc. –