2010-06-01 6 views
0

Serait-il théoriquement possible de rendre BackgroundWorker dans une classe pour actualiser périodiquement le formulaire d'écran de démarrage existant, ou est-ce impossible? (Je sais que c'est probablement une mauvaise conception, mais actuellement je ne vois pas de meilleure façon.)Avoir un écran de démarrage d'actualisation Backgroundworker

S'il vous plaît garder à l'esprit que:

  1. Je ne veux pas le travailleur de fond pour faire le chargement comme serait terriblement difficile à mettre en œuvre.

  2. Je ne peux pas utiliser le support de l'écran de démarrage intégré

  3. Je suis au courant de DoEvents alternatif, mais je ne veux pas aller sur ce chemin, il serait très difficile à mettre en œuvre aussi bien, et non fiable.

+0

OK, attendez une minute: quel support intégré? Est-ce WinForms ou WPF? –

+0

WinForms, désolé de ne pas le mentionner. – Jiri

Répondre

2

Il est tout à fait possible, et si ce n'est pas tout à fait ce que BackgroundWorker était destiné à (principalement, l'actualisation d'une interface graphique de premier plan tout en un processus d'arrière-plan de longue durée est en cours), il est assez sacrément proche.

Si vous essayez de faire quelque chose comme faire pivoter un écran de démarrage à travers des images ou du texte pendant le chargement ou l'installation de votre application, pensez à mettre un timer sur le splash et à rafraîchir le tick.

Il est judicieux de rester à l'écart de DoEvents, ce qui semble être la solution la plus simple au premier abord, mais qui entraîne des problèmes de douleur et des problèmes intermittents et difficiles à corriger. De vos commentaires, il semble que vous chargiez votre application sur le fil de l'interface graphique de l'écran de démarrage, et que votre formulaire splash ne s'actualise pas. C'est un comportement attendu. Vous voudrez placer votre application sur un thread d'arrière-plan, en utilisant le threading bare ou BackgroundWorker (qui est conçu pour exactement cette situation). Je parie que ce n'est pas aussi difficile à faire que vous vous attendez. Si vous rencontrez des problèmes avec cette approche, n'hésitez pas à poser une question demandant de l'aide.

+0

Merci pour votre perspicacité. J'ai juste besoin de rafraîchir l'écran splash périodiquement afin qu'il se redessine, car il devient blanc lorsque l'opération qui dure longtemps est en cours d'exécution. Malheureusement, le minuteur ne fonctionne pas tout à fait. – Jiri

+0

@Jiri: Ah. Cela change les choses - je vois ce que vous faites maintenant. Ça ne marchera pas. Rappelez-vous ce travailleur de fond pour l'option 1, qui semblait difficile à mettre en œuvre? Vous devrez le faire. C'est la bonne façon de faire les choses, et je parie que ce n'est pas si difficile - je l'ai fait plusieurs fois. Si vous éprouvez des difficultés avec cette approche, n'hésitez pas à décrire pourquoi. –

Questions connexes