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线程。在这个网站上有很多关于它的帖子。