在我的ListBox中,我列出了5万多个机场。当一个特定的机场被选中时,我需要装载它的跑道和UI上的其他信息。这是我的代码:
private void ListAirport_SelectedIndexChanged(object sender, SelectionChangedEventArgs e)
{
...
Dispatcher.BeginInvoke(new Action(() =>
{
DataTable dt = TxtFileToTable(Environment.CurrentDirectory + @"\\r5_IOS.txt");
for (int i = 0; i < dt.Rows.Count; i++)
{
if (ListAirport.SelectedItem != null && ListAirport.SelectedItem.ToString() == dt.Rows[i][0].ToString())
{
ListRunway.Items.Add(dt.Rows[i][1]);
ListRunway.SelectedIndex = 0;//select the default runway
}
}
}
));
}我想使用Dispatcher.BeginInvoke来避免UI陷入困境,但这似乎没有帮助。为什么以及如何避免UI被卡住?谢谢。
发布于 2018-04-24 08:30:36
Dispatcher.BeginInvoke使您的操作在UI线程上运行。但是您的处理程序ListAirport_SelectedIndexChanged已经在UI线程上了,所以您不必使用BeginInvoke。相反,您应该在另一个线程中完成您的艰苦工作,并在UI线程中显示结果。https://stackoverflow.com/questions/49996706
复制相似问题