【问题标题】:Program interface hang when restoring from minimized state从最小化状态恢复时程序界面挂起
【发布时间】:2011-02-14 13:21:57
【问题描述】:

当用户恢复程序或一段时间后才来到计算机时,或以相同的远程桌面用户两次访问运行程序的计算机时,会导致程序界面“挂起”的原因 ?..程序没​​有挂起(进程正在响应),但界面变得无响应。用户可以最小化/最大化它,但不能对其内容进行操作。我自己在调试程序时甚至无法重现这种挂起。但是所有客户在我编写的所有程序中都会不时报告它。
可能是我们使用的某些第三方 dll 的错?..在我使用的所有软件中:Devexpress(grid, report, mdimanager), NLog, Stimulsoft Reports(reports)。为了在 mdimanager 中打开新标签,我通常使用 BackgroundWorker,但我认为这不是他的某种同步问题,因为它会自发出现并且不会引发任何异常;只是界面挂起,仅此而已。
可能是我的问题很愚蠢,但我找不到有关此类错误的任何信息,或者只是无法在搜索请求中正确描述它。
将不胜感激任何帮助或建议。

【问题讨论】:

    标签: .net interface response freeze


    【解决方案1】:

    没有看到代码很难说,但根据行为,这听起来像是 UI 代码中的线程问题。有些东西导致它陷入僵局。当 UI 恢复时,您是否从后台工作人员更新 UI。如果您从另一个线程更新 UI,则必须使用 Invoke 方法。您不能从另一个线程更新 UI 线程。

    【讨论】:

    • 不,Maximize/Minimize 上的代码没有任何反应。当我从线程更新 UI 中的任何内容时,我通常使用 BeginInvoke。对不起,但我不能在这里粘贴代码,因为我什至不知道它的哪个部分可以做到这一点。
    • @nihi 你总是使用 BeginInvoke,还是通常。您无法在 UI 线程之外更新 UI。它有时可能会起作用,但有时会锁定或导致其他问题。要检查的另一件事是您是否在 STAThread 单元模型中运行。但这听起来确实像一个线程同步问题。检查您的 OnPaint 方法(如果您要覆盖它)或 OnSizeChanged(如果您要覆盖它)是否存在线程问题。您是否在后台工作线程中使用任何集合。这些集合是否在工作线程中读取并在 UI 线程中修改?
    • 我一定会检查所有这些,谢谢。但我没有覆盖 OnPaint 或 OnSizeChanged.. 但这看起来真的像同步问题..
    猜你喜欢
    • 2012-05-23
    • 1970-01-01
    • 2011-07-02
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多