首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UI线程卡住了大约4秒,dispatcher.BeginInvoke()解决不了这个问题

UI线程卡住了大约4秒,dispatcher.BeginInvoke()解决不了这个问题
EN

Stack Overflow用户
提问于 2018-04-24 08:19:56
回答 1查看 105关注 0票数 0

在我的ListBox中,我列出了5万多个机场。当一个特定的机场被选中时,我需要装载它的跑道和UI上的其他信息。这是我的代码:

代码语言:javascript
复制
    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被卡住?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-24 08:30:36

  1. 您绝对不应该在ListBox中显示50k项。考虑一些更聪明的解决方案。
  2. Dispatcher.BeginInvoke使您的操作在UI线程上运行。但是您的处理程序ListAirport_SelectedIndexChanged已经在UI线程上了,所以您不必使用BeginInvoke。相反,您应该在另一个线程中完成您的艰苦工作,并在UI线程中显示结果。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49996706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档