J'ai des processus longs dans mon application, je l'ai créé un ATTENDRE S'IL VOUS PLAÎT formulaire et j'appeler sur un autre fil comme celui-ci:« WAIT » sous forme cache principale forme
public void ShowWait()
{
continueWait = true;
ThreadPool.QueueUserWorkItem((x) =>
{
using (frmWait espera = new frmWait())
{
espera.ShowInTaskbar = false;
espera.Show();
while (continueWait)
Application.DoEvents();
espera.Close();
}
});
}
Et pour fermer le formulaire J'utilise:
public void HideWait()
{
continueWait = false;
}
Il fonctionne très bien, mais j'ai un problème, lorsque le formulaire d'attente est affiché, les principales pertes forment le focus et toute autre course application (Excel, Word, etc.) en même temps va vers le haut et mon application va à l'arrière de toutes les applications. J'ai essayé d'utiliser Activate() et Focus() mais seul le cadre de la barre des tâches est activé, mais l'application reste à l'arrière de toutes les applications.
Une lumière à ce sujet?
Merci d'avance
Je vous recommande fortement de remplacer votre boucle while par l'utilisation d'un waithandle (tel que 'ManualResetEvent') que vous signalez dans la méthode' HideWait'. De cette façon, vous n'utiliserez pas de ressources processeur inutiles. –
Lorsque j'utilise un événement de réinitialisation manuelle ou automatique, l'application se bloque, le formulaire d'attente ne montre pas l'animation d'attente et l'application entière attend le signal. – Argons
Déjà résolu ce problème ici plusieurs fois ... Jetez un oeil à: 1. http://stackoverflow.com/questions/2183520/backgroundworkers-never-stop-being-busy/2183963#2183963 2. http: // stackoverflow.com/questions/2152445/displaying-please-wait-message/2153082#2153082 – Oliver