J'ai la méthode ci-dessous qui semble se comporter bizarrement. Les ProgressChanged
et RunWorkerCompleted
semblent se mettre à jour en même temps. Si je commente le code RunWorkerCompleted
qui met à jour le bloc de texte, je vois le ProgressChanged
prendre effet après le transfert des données. Qu'est-ce que je fais mal ici? Je veux évidemment que le bloc de texte montre que je reçois des données, puis change quand j'ai fini d'obtenir les données.WPF BackGroundWorker ProgressChanged ne pas mettre à jour le bloc de texte
public void GetAppointmentsBackground()
{
System.Windows.Threading.Dispatcher webServiceDispatcher = this.Dispatcher;
worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.DoWork += delegate(object sender, DoWorkEventArgs args)
{
GetAppointmentsForDayDelegate getAppt = new GetAppointmentsForDayDelegate(GetAppointmentsForDay);
webServiceDispatcher.BeginInvoke(getAppt);
(sender as BackgroundWorker).ReportProgress(25);
};
worker.ProgressChanged += delegate(object s, ProgressChangedEventArgs args)
{
txtMessages.Text = "Contacting Server";
};
worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args)
{
txtMessages.Text = "Completed Successfully";
};
worker.RunWorkerAsync();
}
J'ai essayé cela et aucune exception n'est levée. Incidemment, je ne vois pas le "InvokeRequired" comme une propriété de la classe TextBlock. Après être resté debout toute la nuit là-dessus, je pense que je ferais mieux d'utiliser des répartiteurs directs et de les invoquer pour que je puisse avoir une vie. –