在C#中完成另一个方法后运行一个方法?

时间:2014-05-29 06:07:24

标签: c# wpf

我想,我在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;
                }
            }
        }

    }

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是将所有异步代码包装到一个方法中,因此它将在另一个线程中同步运行。但你必须小心accessing GUI from another thread

如果您需要更复杂的解决方案,可以使用async / await,这可能是WF / WPF的最佳选择。

How to wait until await / async methods finish