1

以下问题:

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

  1. 用户选择文件
  2. 程序启动一个新线程
  3. 线程正在加载文件
  4. 程序调用调度程序将文件设置到布局中

到目前为止一切顺利,第一步到第三步没有问题。

但在第 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 设置。

有没有可能阻止它?

4

2 回答 2

0

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

于 2012-05-14T10:39:39.197 回答
0

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

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

于 2012-05-14T10:44:02.487 回答