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

时间:2013-03-14 17:50:00

标签: c# wpf

我的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 个答案:

答案 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没有被锁定它就会旋转然后简单地将它杀掉。

Try this