C# 奇怪的线程行为
.嗨,我对wpf和线程有一些问题,我就是不能理解这里发生了什么 我有这个活动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
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
}