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

这不是你在 wpf 中做事的方式——使用模型从数据库中填充数据,然后将 CircularProgressBar 可见性绑定到你所处的状态(完成任务时隐藏它)。所有这些样板代码都应该在 xaml 中。

于 2013-03-14T18:16:47.243 回答
0

如果我是你,我会通过使用具有依赖属性的数据绑定来简化生活。要遵循的步骤是什么。

1) 在您的自定义进度条中创建一个名为 IsBusyProperty 的 bool 类型的依赖属性。

2) 将委托注册到其值更改事件(这在您创建依赖属性时完成)。

3) 您现在可以将此 IsBusyProperty 绑定到代码中显示“嘿,我很忙”的状态。

4)当该值设置为 true 时,您将让您的进度条开始它的魔力。

5)当它设置为 false 时,你会停止魔法。

于 2013-03-14T18:19:12.530 回答
0

创建一个带有旋转故事板的控件要简单得多,只要你的 ui 没有被锁定,它就会旋转,然后简单地杀死它。

尝试这个

于 2013-03-15T12:58:12.943 回答