Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 奇怪的线程行为_C#_Wpf_Multithreading_Datagrid - Fatal编程技术网

C# 奇怪的线程行为

C# 奇怪的线程行为,c#,wpf,multithreading,datagrid,C#,Wpf,Multithreading,Datagrid,.嗨,我对wpf和线程有一些问题,我就是不能理解这里发生了什么 我有这个活动 private void TaskActiveChangeClicked(object sender, RoutedEventArgs e) { //Do things... this.ChangeTask((sqTask)this.SelectionObject, (sqTask)this.SelectionObject); this.FindSelectionObject(); } 变更任务 p

.嗨,我对wpf和线程有一些问题,我就是不能理解这里发生了什么

我有这个活动

private void TaskActiveChangeClicked(object sender, RoutedEventArgs e)
{
   //Do things...
   this.ChangeTask((sqTask)this.SelectionObject, (sqTask)this.SelectionObject);
   this.FindSelectionObject();
}
变更任务

private void ChangeTask(sqTask Old, sqTask New)
{            
    //Do things (update in mongoDB)...
    this.LoadTaskList();
}
LoadTaskList[
TaskListTable
是一个数据网格]

private void LoadTaskList()
{
    //Do things (query mongoDB and get List<sqTask>)...
    this.Dispatcher.Invoke((Action)(() =>
    {
        TaskListTable.Items.Clear();
        foreach (sqTask task in TaskList)
        {
            TaskListTable.Items.Add(db);
        }
    }                
    ));
}
它工作得很好,但是如果我删除
消息框
它会崩溃,因为
不包含实例

我猜
LoadTaskList
会将项目添加到数据网格中,但直到调用结束它才会更新。 因此,
…ContainerFromItem(TaskListTable.Items[SelectedIndex])作为DataGridRow为空

但是当我使用messageBox时,它会让thred在搜索表中的行之前做一些“勾选”

问题: 我说得对吗?我怎样才能修好它?(顺便说一句,如果你能在答案中添加ADS使用推荐指南,我会很高兴)


谢谢

这是因为当您显示该框时,
TaskListTable
会添加其所有项。如果你在那里放置一个虚拟的
线程.Sleep
,它就会工作

这是因为当您显示该框时,
TaskListTable
会添加其所有项。如果你在那里放置一个虚拟的
线程.Sleep
,它就会工作

不,不是,我试过了。。顺便说一句,所有函数都发生在同一个线程中@它是斯诺塔利。它仍然不起作用。再说一次:我认为所有调用都是同步的——这里没有异步线程(只有一个线程),所以thread.sleep只是停止整个过程@不,不是,我试过了。。顺便说一句,所有函数都发生在同一个线程中@它是斯诺塔利。它仍然不起作用。再说一次:我认为所有调用都是同步的——这里没有异步线程(只有一个线程),所以thread.sleep只是停止整个过程@这不是塔利。
private void FindSelectionObject()
{
    this.SelectedIndex = TaskListTable.Items.IndexOf(((sqTask)SelectionObject));
    MessageBox.Show("");
    DataGridRow row = TaskListTable.ItemContainerGenerator.ContainerFromItem(TaskListTable.Items[SelectedIndex]) as DataGridRow;                        
    row.Background = Brushes.LightGoldenrodYellow
}