इस मुद्दे का समाधान, जैसा कि एलेक्स ने कृपया बताया, FillCourseList
बना रहा है अतुल्यकालिक भी। यह डेटाबेस से डेटा प्राप्त करते समय प्रोग्राम को चालू रखने की अनुमति देता है। मेरे पास पहले से अवरुद्ध कॉल स्पष्ट रूप से इस मुद्दे का कारण था। यह थ्रेड-सुरक्षित की आवश्यकता को जोड़ता है कॉल
हालांकि विंडोज़ फॉर्म के लिए।
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);
}
}
}