2010-06-11 92 views
0

我想在主窗体运行时在窗体中显示处理图像。如何在我的主窗体中显示处理窗体

我已经创建了处理表单。

ProcessingForm obj = new ProcessingForm(); 

obj.show(); 

DOSomeStuff(); 

obj.close(); 

试了一下它显示处理form..but一段时间就变成没有响应......或者我的GIF图像动画停止。

怎么做?

+0

这不能工作。您必须使用BackgroundWorker来防止冻结您的UI线程。 *许多*关于它在这个网站上的线程。 – 2010-06-11 14:05:45

回答

0

您可以使用BackgroundWorker类来分离表单消息处理和处理您的代码如DoSomeStuff()的代码。如果你想知道你的DoSomeStuff()已经完成了什么进程,你可以在你的后台工作者中实现,因为这个类支持它。

但如果你的环境是放缓至获得实时此两件事情的处理,你必须给你的BackgroundWorker的一些优先级最低那么你的图像可以实时工作,但你的东西做得更长。 这不是很好的解决方案,因为取决于环境。

0

我从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将不会更新。

+0

这也不起作用,因为OP的ProcessingForm不起作用。当UI线程不泵送消息循环时没有Tick事件。 – 2010-06-11 14:02:37

相关问题