我的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
显示几秒钟而且没有运行。我的臭虫在哪里?
答案 0 :(得分: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
}
答案 1 :(得分:0)
这不是你在wpf中做的事情 - 使用模型填充数据库中的数据,然后将CircularProgressBar可见性绑定到 你所处的状态(当你完成任务时隐藏它)。 所有这些样板代码都应该是xaml。
答案 2 :(得分:0)
如果我是你,我会通过使用依赖属性的数据绑定来简化生活。 要遵循的步骤是什么。
1)在自定义进度条中创建一个名为bool类型的IsBusyProperty的依赖项属性。
2)将委托注册到其值更改事件(这在创建依赖项属性时完成)。
3)现在,您可以将此IsBusyProperty绑定到代码中的状态,表示我很忙。
4)当值设置为true时,您的进度条就会开始变得神奇。
5)当它被设置为假时你就停止了魔法。
答案 3 :(得分:0)
创建一个旋转故事板的控件要简单得多,只要你的ui没有被锁定它就会旋转然后简单地将它杀掉。