C#winforms进度条选框在睡眠期间动画,但不是在工作期间

时间:2017-04-28 08:53:14

标签: c# winforms progress-bar

我在c#中实现了一个窗口表单,其中包含一个marquee样式的进度条和一个backgroudworker来完成一项工作。当backgroundworker睡觉时,进度条动画正常工作,但是当backgroundworker开始做某事时它会挂起。有谁知道我做错了什么?

提前感谢您的回答。

这是我的代码:

public FormProgressBarMarquee()
    {

        InitializeComponent();

        this.progressBar1.Style = ProgressBarStyle.Marquee;
        this.progressBar1.MarqueeAnimationSpeed = 50;

        Shown += new EventHandler(FormProgressBar_Shown);
        backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
        backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_Completed);
    }

    void FormProgressBar_Shown(object sender, EventArgs e)
    {
        backgroundWorker1.RunWorkerAsync();
    }

    void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {

        System.Threading.Thread.Sleep(10000);
        // the progress bar animation works correctly

        longtimerunningprocess.start();
        // the progress bar animation stops           
    }

    void backgroundWorker1_Completed(object sender, RunWorkerCompletedEventArgs e)
    {
        Debug.Print(" :: FormProgressBar :: ...Pack And Go loaded, close form...");
        this.DialogResult = DialogResult.OK;
        this.Close();
    }

1 个答案:

答案 0 :(得分:0)

我终于可以自己解决问题了。无论如何,感谢@digvijay的评论让我走上正轨。

我写的程序是类库的一部分。 longtimerunningprocess是主程序的一部分,在主UI线程中执行。

虽然我总是试图将启动画面保留在主UI线程中并使用后台工作者将非UI工作放入一个单独的线程中,但这次我不得不将启动画面放在一个单独的线程中。

为此,我使用了这个建议:

https://stackoverflow.com/a/48946