如何在C#中同时运行两个操作
我在WPF应用程序中遇到问题。我有一个自定义CircularProgressBar
。当我从数据库中检索数据时,需要几秒钟的时间。如何在C#中同时运行两个操作
我想在检索数据时在我的应用中显示CircularProgressBar
。在我的自定义类(Printer
)
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();
:
此代码运行CircularProgressBar
。
在哪里我把这个窗口:
Printer p = new Printer();
p.Show();
//Code For retrieve Data from DataBase
p.close();
所以出现这种情况:CircularProgressBar
显示几秒钟,并没有运行。我的bug在哪里?
您可以简单地使用背景工人:
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
}
这不是你如何在WPF做的东西 - 使用一个模型来从数据库中填充数据,比CircularProgressBar知名度绑定到 状态你”重新进入(当你完成任务时隐藏它)。 所有这些样板代码应该在xaml中。
如果我是你,我会通过使用数据绑定和依赖属性来简化生活。 遵循什么步骤。
1)在自定义进度条中创建一个名为IsBusyProperty的依赖属性,其类型为bool。
2)向其值更改事件注册委托(这是在创建依赖项属性时完成的)。
3)现在,您可以将此IsBusyProperty绑定到代码中的一个状态,表示嘿,我很忙。
4)当这个值被设置为true时,你会得到你的进度条来开始它的魔法。 5)当它被设置为false时,你停止魔法。
以上所有对我有用。感谢所有你。我试试这个 – 2013-03-16 11:41:53
使用后台工作者。 [这可能有所帮助](http://stackoverflow.com/questions/5483565/how-to-use-wpf-background-worker) – musefan 2013-03-14 17:51:32
@abbas Pirmoradi:使用后台工作,并用progreschanged事件更新进度栏值。 – KF2 2013-03-14 18:06:04