我在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();
}
答案 0 :(得分:0)
我终于可以自己解决问题了。无论如何,感谢@digvijay的评论让我走上正轨。
我写的程序是类库的一部分。 longtimerunningprocess是主程序的一部分,在主UI线程中执行。
虽然我总是试图将启动画面保留在主UI线程中并使用后台工作者将非UI工作放入一个单独的线程中,但这次我不得不将启动画面放在一个单独的线程中。
为此,我使用了这个建议: