【问题标题】:How to show processing form in my main form如何在我的主表单中显示处理表单
【发布时间】:2010-06-11 13:01:57
【问题描述】:

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

我已经创建了处理表单。

我试过了

ProcessingForm obj = new ProcessingForm();

obj.show();

DOSomeStuff();

obj.close();

它显示处理表单..但有时它变得没有响应...或者我的 gif 图像停止动画。

怎么做??

【问题讨论】:

  • 这行不通。您必须使用 BackgroundWorker 来防止冻结您的 UI 线程。 许多 在这个网站上讨论它。

标签: winforms process c#-2.0 show


【解决方案1】:

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

但是,如果您的环境无法实时处理这两件事,您必须为 BackgroundWorker 提供最低优先级,这样您的图像才能实时工作,但您的工作时间更长。 这不是好的解决方案,因为取决于环境。

【讨论】:

    【解决方案2】:

    我使用了来自 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 事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多