0

DataGridControlユーザーの選択に応じて DataTables が取り込まれた WPF Extended Toolkit からaa を取り込みます。ユーザー選択が変更されると、200 x 1000 行の DataTable の表示に大きな遅延が発生するだけでなく、ユーザー操作の遅延がDataGridControl発生して、ユーザーが他のコントロールと対話できなくなります。別のスレッド。

DataGridControl の更新中にユーザーがビュー内の他のコントロールを操作できるように、遅延を取り除くにはどうすればよいですか?

    public string ListBoxSelection {
                get { 
                    return listBoxSelection;
                }
                set {
                    listBoxSelection = value;
                    OnPropertyChanged("ListBoxSelection"); //  DataGridSelection

                    BackgroundWorker threadPreviewLoader = new BackgroundWorker();
                    threadPreviewLoader.DoWork += (LoadDataGridPreview); 
                    threadPreviewLoader.RunWorkerAsync();
                }
            }

    private DataTable dTPreviewWindow; //modified in thread 

    public DataView dvLbSelection {
            get {
                return dTPreviewWindow.DefaultView;  //DataGridControl binding 
            }
        }

private void LoadDataGridPreview(object sender, DoWorkEventArgs e) {

            if (listBoxSelection != null) {
                try {
                    DataTable testImmediateChange = new DataTable();
                    testImmediateChange = DataSetModel.ChunkFlatFile(listBoxSelection, 1, PREVIEW_WINDOW_MAX_ROWS); //labor itensive work 
                    dTPreviewWindow = testImmediateChange;
                    fileOpenGood = true;
                } catch {

                    fileOpenText = DATAGRID_TEXT_BADFILE;
                    fileOpenGood = false;


                }
                fileOpenText = DATAGRID_TEXT_NOFILECHOSEN;

                OnPropertyChanged("FileOpenGood");
                OnPropertyChanged("FileOpenBad");
                OnPropertyChanged("FileOpenText");
                OnPropertyChanged("dvLbSelection");
            } else {
                ValidatePreviewWindow(true);
            }
        }
4

1 に答える 1

0

データビュー、つまり dvLbSelection が UI バウンドの場合、バックグラウンド スレッドで更新しても UI が更新されます。その結果、ユーザーが他のコントロールを操作しようとすると遅延が発生します。ここで、いくつかのことを試すことができます。

  1. すべてのデータが読み込まれるまで、データビューを UI から切断します。(一時変数を使用して、バックグラウンド スレッドで値を読み込みます)
  2. データ グリッドで仮想化を使用し、VirtualizingStackPanel.VirtualizationMode ="Recycling" を設定します。
  3. 複数のバックグラウンド スレッドを作成しないでください (提供されているコード スニペットに従って、ListBox の選択ごとに新しいスレッドが作成されます)。多くのスレッドでコストのかかる操作を実行すると、遅延の主な理由の 1 つになります。

お役に立てれば!

于 2013-02-20T22:58:06.397 に答える