La solution au problème, comme Alex l'a gentiment souligné, est de créer la FillCourseList
asynchrone aussi. Cela permet au programme de continuer à s'exécuter pendant que les données sont extraites de la base de données. L'appel de blocage que j'ai eu auparavant était apparemment la cause du problème. Cela ajoute le besoin de thread-safe appels
au formulaire Windows cependant.
private delegate void SetListCallback(List<Course> result);
private async Task GetCourseList() {
Task<List<Course>> courseTask = MongoDBController.GetCourses();
List<Course> result = await courseTask.ConfigureAwait(false);
// When finished, fill the listbox
FillCourseList(result);
}
private void FillCourseList(List<Course> result) {
// If the calling thread's ID doesn't match the creating thread's ID
// Invoke this method on the correct thread via the delegate
if (this.listBox_overview_vakken.InvokeRequired) {
SetListCallback d = new SetListCallback(FillCourseList);
this.Invoke(d, result);
} else {
foreach (Course s in result) {
listBox_overview_vakken.Items.Add(s);
}
}
}