我想在主窗体运行时在窗体中显示处理图像。如何在我的主窗体中显示处理窗体
我已经创建了处理表单。
我
ProcessingForm obj = new ProcessingForm();
obj.show();
DOSomeStuff();
obj.close();
试了一下它显示处理form..but一段时间就变成没有响应......或者我的GIF图像动画停止。
怎么做?
我想在主窗体运行时在窗体中显示处理图像。如何在我的主窗体中显示处理窗体
我已经创建了处理表单。
我
ProcessingForm obj = new ProcessingForm();
obj.show();
DOSomeStuff();
obj.close();
试了一下它显示处理form..but一段时间就变成没有响应......或者我的GIF图像动画停止。
怎么做?
您可以使用BackgroundWorker
类来分离表单消息处理和处理您的代码如DoSomeStuff()
的代码。如果你想知道你的DoSomeStuff()
已经完成了什么进程,你可以在你的后台工作者中实现,因为这个类支持它。
但如果你的环境是放缓至获得实时此两件事情的处理,你必须给你的BackgroundWorker的一些优先级最低那么你的图像可以实时工作,但你的东西做得更长。 这不是很好的解决方案,因为取决于环境。
我从CodeProject使用this code。这是一个类似于Firefox使用的“旋转”计时器动画。
添加DLL作为项目的引用,并删除您的窗体上的进度指示器。
设置它的初始状态是不可见的。
然后,当你想展示你的处理来电:
this.progressIndicator.Visible = true;
this.progressIndicator.Start();
要删除它时,处理完成呼叫:
this.progressIndicator.Stop();
this.progressIndicator.Visible = false;
它采用了System.Windows.Forms.Timer
控制动画,并覆盖OnPaint
方法来绘制旋转的图像。这可能和你需要的一样准确。
我不是作家,但我已经使用这个并没有与它减慢实际过程明显下降的任何问题。
但是,你必须把你的处理到另一个线程 - 使用BackgroundWorker
类,否则UI将不会更新。
这也不起作用,因为OP的ProcessingForm不起作用。当UI线程不泵送消息循环时没有Tick事件。 – 2010-06-11 14:02:37
这不能工作。您必须使用BackgroundWorker来防止冻结您的UI线程。 *许多*关于它在这个网站上的线程。 – 2010-06-11 14:05:45