S'il vous plaît jeter un oeil sur le code suivant:En utilisant Application.Run() sur différents threads
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);
Il semble que tout fonctionne bien: d'abord je vois le splashscreen, plus tard, le mainform se met en marche. Mais d'une manière ou d'une autre, j'ai des erreurs étranges, comme: les éléments graphiques (un ProgressBar sans fin) ne s'affichent pas correctement.
EDIT: J'ai deux barres de progression, une sur le splashscreen, sur la mainform. Ils montrent tous deux le même (mauvais) comportement en mode sans fin: pas de progrès, juste le fond pur. /EDIT
À mon avis, cela est dû à l'appel de Application.Run()
sur différents threads. Ces erreurs peuvent être éliminés en appelant une fonction/propriété du Mainform avant de commencer la splashscreen - comme, par exemple
mainForm.Text = mainForm.Text;
Quelqu'un peut-il s'il vous plaît confirmer que ce code peut causer des problèmes - ou qu'il doit se comporter bien et je chercher l'erreur ailleurs?
J'ai déjà cherché des implémentations de splashscreen et je sais que cela peut être fait différemment. Mais je suis intéressé à comprendre cette implémentation et ses problèmes éventuels. Merci!
Les barres de progression peuvent être un peu spéciales, car elles peuvent truner leur propre thread pour faire ce truc de marque. Pouvez-vous isoler et décrire ce qui se passe? Comme si vous utilisiez un PB bloqué, ajoutez un PB avec la valeur = 50 etc. –