【问题标题】:How to keep UI unlocked while loading child screens in winform如何在winform中加载子屏幕时保持UI解锁
【发布时间】:2015-10-06 04:48:37
【问题描述】:

我有一个非常笼统的问题。我用谷歌搜索,但没有找到任何好东西。

所以问题是:我有 winform 应用程序,根据从菜单栏中选择的选项,加载子表单/视图,这些子表单用于显示报告。

为了生成报告,这些子表单包含报告选择标准,如日期、名称等,这些值来自数据库。根据 DB 中可用的值,我们在视图中添加控件。

当屏幕需要大量时间来加载时,就会出现问题,它会在加载过程中冻结 UI/应用程序,这是我不想要的。

我也尝试过异步运行任务,但由于它在处理过程中使用视图,因此此选项失败。

ThreadPool.QueueUserWorkItem(delegate { method.Invoke(presenter, results); });

presenter 是我的 viewpresenter,结果是调用它的参数。应用程序在运行时结束演示者名称并使用 methodinfo.invoke() 调用其默认方法。

有没有其他方法可以达到同样的效果。

要点:我无法重新设计整个应用程序以将完整的数据库逻辑与 UI 逻辑分开,因为它是遗留应用程序,这可能会破坏应用程序。

【问题讨论】:

  • ...“你尝试了什么”在哪里?
  • 从您提供给我们的有限信息来看,我们只能建议将 DB 逻辑与 UI 逻辑分开,但您说我们不能这样做。所以,除非你能给我们更多细节,否则我认为你被困住了。
  • 您需要显示与问题相关的所有代码。你仍然没有给我们任何继续。
  • 回复:it freeze UI/application during loading that I don't want. 当然不是。如果您需要帮助,您需要提供it 背后的所有详细信息。但是,可能没有任何人可以做任何事情来加快数据访问或在表单上绘制控件。

标签: c# winforms user-interface asynchronous


【解决方案1】:

如果“冻结”是问题,您可以使用 doevents,请参见此处:Use of Application.DoEvents()

或者,您可以采用真正老式的 vb6 方式:同步运行冻结您的 UI 的代码,但从显示在您的 UI 的模式窗口中。您可以向用户显示进度指示器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多