-1

WPF/XAML/C# プログレス バーの可視性を可視に設定し、長時間実行されたプロセスの後に非表示にしました。これを達成するために Task.Factory.StartNew と ContinueWith を使用しようとしています。この部分は正常に動作しますが、何らかの理由で、コマンドにデータバインドされているナビゲーション ボタンは、長いプロセスの後で実際に画面をクリックするまで更新されません。task.factory.startnew を省略すると、ボタンは正しく更新されます (ただし、プログレス バーは表示されません)。どうすればこれを修正できますか? UI でプロセスとボタンが更新されない問題を示すサンプル コードを次に示します。

private void DoWorkCommandExecuted()
        {
            //Do stuff
            ShowProgress = Visibility.Visible;

            Task.Factory.StartNew(() =>
                {
                    //Thread.Sleep(3000);
                    for (int i = 0; i < 10000; i++)
                    {
                        s += i.ToString();
                    }

                    ObservableCollection<string> temp = new ObservableCollection<string>();
                    temp.Add("One");
                    temp.Add("Two");
                    temp.Add("Three");
                    temp.Add("Four");
                    temp.Add("Five");

                    BillingCycles = temp;

                    SelectedBillingCycle = BillingCycles[0];
                })
                .ContinueWith(t =>
            {
                ShowProgress = Visibility.Hidden;
            });
        }

そして、有効化を制御するボタン コードのプロパティの 1 つのサンプル:

private bool CanFirst
        {
            get
            {
                bool b = false;

                if (BillingCycles != null)
                {
                    if (BillingCycles.Count > 0 && SelectedBillingCycle != BillingCycles[BillingCycles.Count - 1])
                    {
                        b = true;
                    }
                }

                return b;
            }
        }

INotifyPropertyChanged を使用しています。これは、私の問題を示す非常に基本的な例であり、はるかに複雑なプログラムにあります。[最初に移動] または [最後に移動] ボタンは、選択された BillingCycle に基づいて有効/無効にする必要があります。スレッドで実行するコードを含めない場合、ボタンは正しく有効/無効になります (プロセスの実行中に進行状況バーが表示されないだけです)。

4

2 に答える 2