我想,我在C#/ WPF中遇到线程问题。
如何正确运行方法以防止出现Null Value等问题。
我认为在下面的代码" IF statment"在" selectLessonContent(selectedLessonId)"之前运行方法并导致下面的Null值问题。
当我在selectLessonContent(selectedLessonId)方法之后立即使用MessageBox.Show()时,这个问题就消失了。
private void btnSelectLesson_Click(object sender, ExecutedRoutedEventArgs e)
{
selectLessonContent(selectedLessonId);
if (selectedUserID != "QuickStart")
{
int lessonScore = Int32.Parse(userlessonManager1.selectUserLesson("existCheck", selectedUserID, selectedLessonId).Rows[0][3].ToString());
if (lessonScore < sectionListview.Items.Count )
{
for (int a = 1; a < sectionListview.Items.Count; a++)
{
ListViewItem item = sectionListview.ItemContainerGenerator.ContainerFromIndex(a) as ListViewItem;
ContentPresenter templateParent = GetFrameworkElementByName<ContentPresenter>(item);
DataTemplate dataTemplate = sectionListview.ItemTemplate;
//error occured Here : Value cannot be null.
Button btnTemp = dataTemplate.FindName("btnSectionList", templateParent) as Button;
btnTemp.IsEnabled = false;
}
}
}
}
答案 0 :(得分:0)
最简单的解决方案是将所有异步代码包装到一个方法中,因此它将在另一个线程中同步运行。但你必须小心accessing GUI from another thread
如果您需要更复杂的解决方案,可以使用async / await,这可能是WF / WPF的最佳选择。