0

WPFアプリに問題があります。私はカスタムを持っていますCircularProgressBar。データベースからデータを取得する場合、数秒かかります。

CircularProgressBarデータが取得されている間、アプリにを表示したいと思います。

このコードは:を実行しCircularProgressBarます

CircularProgressBar cb = new CircularProgressBar();
stk.Children.Add(cb);

ThreadStart thStart = delegate()
{
    ThreadStart inv = delegate()
    {
        stk.Children.Remove(cb);

    };
    this.Dispatcher.Invoke(inv, null);
};

Thread myThread = new Thread(thStart);
myThread.Start();

私のカスタムクラス(Printer)。

そして、私がこのウィンドウと呼ぶところ:

Printer p = new Printer();

p.Show();

//Code For retrieve  Data from DataBase

p.close();

だからこれは起こります:CircularProgressBar数秒間表示され、実行されていません。私のバグはどこにありますか?

4

4 に答える 4

1

単純にバックグラウンドワーカーを使用できます。

private BackgroundWorker bw = new BackgroundWorker();

bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
//load data from database
System.Threading.Thread.Sleep(1);
worker.ReportProgress(progressbar_value);
}

private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Progress.value= progressbar_value;
}

private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//progress completed
}
于 2013-03-14T18:14:33.927 に答える
0

私があなたなら、dependencypropertiesでデータバインディングを使用することで生活を簡素化します。従うべきステップは何ですか。

1)カスタムプログレスバーにbool型のIsBusyPropertyという依存関係プロパティを作成します。

2)デリゲートをその値変更イベントに登録します(これは、依存関係プロパティを作成するときに行われます)。

3)これで、このIsBusyPropertyを、忙しいというコード内のステータスにバインドできます。

4)値がtrueに設定されると、プログレスバーが魔法を開始します。

5)falseに設定されている場合、魔法を停止します。

于 2013-03-14T18:19:12.530 に答える
0

回転するストーリーボードを使用してコントロールを作成する方がはるかに簡単です。UIがロックされていない限り、UIは回転し、後でそれを強制終了します。

これを試して

于 2013-03-15T12:58:12.943 に答える
0

これは、wpfでの作業方法ではありません。モデルを使用してdbからデータを入力し、CircularProgressBarの可視性を現在の状態にバインドします(タスクの完了時に非表示にします)。このボイラープレートコードはすべてxamlである必要があります。

于 2013-03-14T18:16:47.243 に答える