Solusi untuk masalah ini, seperti yang ditunjukkan oleh Alex, adalah membuat FillCourseList
juga asinkron. Ini memungkinkan program untuk terus berjalan saat data diambil dari database. Panggilan pemblokiran yang saya lakukan sebelumnya tampaknya adalah penyebab masalahnya. Ini memang menambah kebutuhan untuk thread-safe panggilan
ke Formulir Windows sekalipun.
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);
}
}
}