wpf mvp listview与gridview长渲染时间

时间:2017-05-04 14:08:37

标签: c# wpf listview gridview mvp

我有一个用户控件,其中包含一个带有gridview的列表视图。 我正在使用后台工作者开始加载动画,获取数据并停止加载动画。一切都很好,但问题是在我获取数据并将其绑定到网格之后,在这段时间内渲染网格和加载动画冻结需要很长时间。

BackgroundWorker bw = new BackgroundWorker() { WorkerReportsProgress = true };



    public FormUserControl()
    {
        InitializeComponent();
        presenter = new FormPresenter(this);
        bw.DoWork += new DoWorkEventHandler(LoadInfo);
        bw.RunWorkerCompleted += LoadInfo_RunWorkerCompleted;



        Dispatcher.Invoke(new Action(() =>
        {
            EnableLoading(true);

        }), DispatcherPriority.ContextIdle);

        bw.RunWorkerAsync();

    }

    void LoadInfo(object sender, DoWorkEventArgs e)
    {
        presenter.LoadFormInformation();
    }

    private void LoadInfo_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e)
    {
        Dispatcher.Invoke(new Action(() =>
        {
            //here animation freezes 
            this.AjmStoreLog = this.GridInfo;
            EnableLoading(false);

        }), DispatcherPriority.ContextIdle);
    }

我需要调用EnableLoading(false);网格渲染完成时不在LoadInfo_RunWorkerCompleted事件中的此函数。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在很多情况下,性能会因为工作量太大而受到影响,并且很多工作必须在UI线程上进行。没有可以帮助的灵丹妙药解决方案 - 如果您的数据源中有很多项目,或者您的模板非常复杂......

我建议首先考虑UI虚拟化,假设有很多项目,这是性能问题的主要原因。如果没有UI虚拟化,列表控件需要呈现数据源中的每个项目,但启用它将使得只有可见项目才能在屏幕上实际呈现,这会产生巨大的差异。