Lösningen på problemet, som Alex vänligt påpekade, är att skapa FillCourseList
asynkron också. Detta gör att programmet kan fortsätta köras medan data hämtas från databasen. Det blockerande samtalet jag hade tidigare var tydligen orsaken till problemet. Detta ökar behovet av trådsäkert samtal
dock till Windows-formuläret.
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);
}
}
}