在GUI内容中设置阻止的用户操作

时间:2012-05-14 10:27:02

标签: c# multithreading user-interface user-interaction

以下问题:

我想在程序中上传文件,用户应该可以进行设置。 因为文件非常大,我想将它们加载到新线程中,以便用户可以在GUI中进行其他设置。 (速度:快)

  1. 用户选择文件
  2. 程序启动新主题
  3. 线程正在加载文件
  4. 程序调用调度程序将文件设置为布局
  5. 到目前为止一切顺利,第一步到第三步没有问题。

    但是在第4步中,我创建了Dispatcher.Invoke。

    private void SetNewContent(object newContent)
    {
        _userControl.Dispatcher.Invoke(
            DispatcherPriority.Normal,
            new System.Action(
                delegate()
                {
                    _userControl.SetContent(newContent);
                }
            )
        };
    }
    

    方法_userControl.SetContent很慢。对于10,000个页面,该方法大约需要5秒,这对于用户来说太长了。在此期间,用户无法更改GUI设置。

    是否有可能阻止它?

2 个答案:

答案 0 :(得分:0)

您不应该一次呈现所有内容。仅显示可见内容 如果“newContent”是一个集合(或者可以包装到集合中),您可以通过“ItemsSource”属性将它绑定到任何WPF列表控件 - 它们是虚拟的,因此它们只渲染可见的项目。

答案 1 :(得分:0)

我们遇到了类似的问题,我们使用的Grid控件的“虚拟化”模式没有。在虚拟模式下,它只会为可见部分构建UI元素,并在您滚动时重新使用它(而不是一次性构建所有10,000个元素)

什么是控件(哪个供应商?即Infragistics / Telerik / DevExpress)用于显示日期?检查它是否支持虚拟化,现在大多数都支持虚拟化。