J'utilise .net 2.0 et j'ai créé un formulaire (System.Windows.Forms.Form) pour afficher des informations lors de tâches longues. Lorsque je démarre une tâche longue, je crée une nouvelle instance de ce formulaire, appelez .Show() et démarrez BackgroundWorker. Mais même si j'utilise un BackgroundWorker pour faire le travail, le formulaire apparaît en effet, mais bloque immédiatement et ne répond pas jusqu'à ce que l'arrière-plan ait fini, i.d. le formulaire apparaît mais le contenu (un gif et une zone de texte) n'est pas affiché?C#: Blocage de formulaire popup malgré BackgroundWorker
La chose étrange est, cela ne se produit pas lorsque le travail pour BackgroundWorker est aussi intensif!?! Comment venir?
Exemple:
private void UpdateReportingTab()
{
//p is an instance variable; Progressbar is just a simple form control
//showing the passed message
p = new Progressbar("Loading Data...");
p.Show();
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.RunWorkerAsync();
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
p.BeginInvoke(new MethodInvoker(p.Close));
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new MethodInvoker(delegate()
{
//long running database queries, whose results update text fields
//while text fields are filled p show "no response"
TextEditItems.Text = Convert.ToString(itemsDao.getItemCount());
....
}
}
}
Merci!
Andi
Whoa, stable sur les chapeaux là-bas ... – cofiem
Merci, vous avez raison. Comment ai-je pu manquer ça :)? –