如何在winform中加载子屏幕时保持UI解锁

时间:2015-10-06 04:48:38

标签: c# winforms user-interface asynchronous

我有非常一般的问题。我试过谷歌,但找不到任何好的东西。

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

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

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

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

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

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

还有其他方法可以达到目的。

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

1 个答案:

答案 0 :(得分:0)

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

或者,您可以采用真正老式的vb6方式:运行同步冻结UI的代码,但是从上面 您的ui的模式窗口。您可以通过事件向用户显示进度指示器。