【问题标题】:How to make windows form UI responsive?如何使 Windows 窗体 UI 响应?
【发布时间】:2008-10-15 18:51:45
【问题描述】:

这是所有开发人员的常见问题,我正在寻找使 Windows 窗体 UI 响应的最佳解决方案。

我有一个动画 GIF 文件来显示我在 Windows 窗体上的计算进度。我拿了一个图片框控件并将动画 gif 放入其中。现在当我开始计算时 - 动画 gif 冻结。我想要相反的,当我运行计算时动画应该是可见的。

有什么中肯的想法吗?一个简单的解决方案是在后台进行复杂计算的同时向用户显示进度条

我的应用程序是一个单线程应用程序,我想要一个简单的解决方案,而不是寻找多线程或后台工作者类型的技术。

有什么帮助吗?

【问题讨论】:

    标签: winforms user-interface .net-2.0


    【解决方案1】:

    我建议多线程。第一次尝试时有点乱;)

    最简单的模型:一个线程用于 GUI,一个线程用于您需要做的任何工作。

    检查this link

    【讨论】:

    • 问题是您必须使用委托并调用才能从工作线程在 UI 上进行更改。
    • 是的。和?一旦你知道怎么做,它就不再是问题了。
    • 嗯,有时您想将逻辑与视图分开。我研究过一个简化套接字使用的类。它使用线程来查找数据。但我不能只发送一个数据可用的事件,然后在该事件中更新用户界面。
    【解决方案2】:

    Application.doevents

    你把它放在循环中。它让 UI 有时间去做它的事情。

    【讨论】:

      【解决方案3】:

      嗯,一次做两件事的唯一真正方法(比如做计算,并且仍然保持响应)是使用线程。如果您不想显式使用线程,请检查是否有任何异步调用可用于在后台执行此操作。除此之外,在您做大量工作的地方进行大量 Application.DoEvents 调用。

      【讨论】:

        【解决方案4】:

        我将不得不让 Jeff 参与其中:

        Coding Horror: Is DoEvents Evil?

        【讨论】:

        • 我想知道为什么 .net 不包含一个“DoSomeEvents”方法来处理一些保持 UI 响应所需的东西,而不处理按钮按下之类的东西?有一些方法可以达到这种效果,但它们很笨重。
        【解决方案5】:

        “在后台进行复杂计算时向用户显示进度的简单解决方案?”

        “不是在寻找多线程或后台工作者类型的技术。”

        这些愿望中哪一个对你来说更重要?您必须选择其中之一。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-08
          • 1970-01-01
          相关资源
          最近更新 更多