Winforms 如何在我的主窗体中显示处理窗体

Winforms 如何在我的主窗体中显示处理窗体,winforms,process,c#-2.0,show,Winforms,Process,C# 2.0,Show,当我的主窗体工作时,我想在窗体中显示正在处理的图像 我已经创建了处理表单 我试过了 ProcessingForm obj = new ProcessingForm(); obj.show(); DOSomeStuff(); obj.close(); 它显示正在处理的表单…但有时它会变得没有响应…或者我的gif图像停止动画 如何做到这一点???您可以使用BackgroundWorker类将处理表单消息的过程与处理代码的过程分开,如DoSomeStuff()。如果您想知道您的DoSomeSt

当我的主窗体工作时,我想在窗体中显示正在处理的图像

我已经创建了处理表单

我试过了

ProcessingForm obj = new ProcessingForm();

obj.show();

DOSomeStuff();

obj.close();
它显示正在处理的表单…但有时它会变得没有响应…或者我的gif图像停止动画


如何做到这一点???

您可以使用
BackgroundWorker
类将处理表单消息的过程与处理代码的过程分开,如
DoSomeStuff()
。如果您想知道您的
DoSomeStuff()
的进度,您可以在后台工作程序中实现它,因为这个类支持它

但是,如果您的环境在实时处理这两件事方面进展缓慢,您必须给您的后台工作人员一些最低优先级,这样您的图像可以实时工作,但您的工作时间更长。这不是一个好的解决方案,因为它依赖于环境。

我从CodeProject使用过。这是一个类似于Firefox的“旋转”计时器动画

添加dll作为对项目的引用,并在表单上删除进度指示器

将其初始状态设置为不可见

然后,当您要显示正在处理的呼叫时:

this.progressIndicator.Visible = true;
this.progressIndicator.Start();
要在处理完成时删除它,请调用:

this.progressIndicator.Stop();
this.progressIndicator.Visible = false;
它使用
System.Windows.Forms.Timer
来控制动画,并覆盖
OnPaint
方法来绘制图像。这可能与您需要的一样准确

我不是作者,但我使用过它,并且没有任何问题,它明显地减慢了实际过程


但是,您必须将处理放在另一个线程上-使用该类,否则UI将无法更新。

这也无法工作,原因与OP的ProcessingForm无法工作相同。当UI线程不泵送消息循环时,没有勾号事件。这无法工作。您必须使用BackgroundWorker来防止冻结UI线程。在这个网站上有很多关于它的帖子。