2

タブ項目のユーザー コントロールにあるデータ グリッドの魔女をバインドする必要があるアプリケーションがあります。

このプロセスには時間がかかるため、別のスレッドで読み込みアニメーションを使用して別のタブ項目を作成し、データ グリッドにデータを読み込むときに、データが読み込まれるまでアニメーションでタブ項目を選択します。

問題は、アニメーションが開始されていることですが、データ グリッドのバインドが開始されると、アニメーションがフリーズします。

this.Dispatcher.Invoke(DispatcherPriority.Normal,
            new Action(
                delegate()
                {
                    tiLoading.Content = new Controls.Loading.LoadingAnimation();
                    tiLoading.IsSelected = true;
                }
        ));

//And now I populate the content of the Tab Item with the User Control that contains data grid

connType = choseConnType(); // Here is a dialog witch ask the user somethig and return a value
tiGeneral.Content = new Windows.General(true, connType);

バインディングを開始するダイアログの後、LoadingAnimation がフリーズします。

4

1 に答える 1

0

それは理解できます。長時間実行されるプロセスがある場合は、BackgroundWorkerを使用して実行する必要があります。

public void ItsGonnaBeLong()
{
    this.IsBusy = true;
    var worker = new BackgroundWorker();
    worker.DoWork += this.MyDoWorkMethod;
    worker.RunWorkerCompleted += this.MyDoWorkCompleted;
    worker.RunWorkerAsync();
}

private void MyDoWorkCompleted(object sender, RunWorkerCompletedEventArgs e)
{
   // executed after work on background thread is completed
   this.IsBusy = false;
}

private void MyDoWorkMethod(object sender, DoWorkEventArgs e)
{
   // Do something.
}

アニメーションを別の TabItem に配置するのはきれいですか? Extended WPF ToolkitBusyIndicatorからの使用を検討しましたか? Control を BusyIndi​​cator でラップし、その IsBusy プロパティを使用して実行できます。

<xctk:BusyIndicator IsBusy="True" >
        <my:MyUserControl />
</xctk:BusyIndicator>
于 2013-02-04T14:02:06.643 に答える