如何在c#中并发运行两个操作

本文关键字:两个 操作 运行 并发 | 更新日期: 2023-09-27 18:04:09

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

如何在c#中并发运行两个操作

你可以简单地使用background worker:

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时,您将停止魔术

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

试试这个