如何在C#中同时运行两个操作

我的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显示几秒钟而且没有运行。 我的虫子在哪里?

你可以简单地使用后台工作者:

 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)在自定义进度条中创建一个名为bool类型的IsBusyProperty的依赖项属性。

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

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

4)当值设置为true时,您将获得进度条以开始其魔力。

5)当它被设置为假时你停止魔法。

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

试试这个