如何保持UI解锁,而加载子屏幕在winform

本文关键字:屏幕 winform 加载 何保持 UI 解锁 | 更新日期: 2023-09-27 18:16:14

我有一个很一般的问题。我试着谷歌一下,但找不到任何好的。

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

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

问题来了,当屏幕需要很多时间来加载,它冻结UI/应用程序在加载过程中,我不希望。

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

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

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

还有其他方法可以达到同样的效果吗?

要点:我不能重新设计整个应用程序,将完整的DB逻辑从UI逻辑中分离出来,因为它是遗留应用程序,这可能会破坏应用程序。

如何保持UI解锁,而加载子屏幕在winform

如果"冻结"是问题,你可以使用doevents,参见这里:使用Application.DoEvents()

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