我有非常一般的问题。我试过谷歌,但找不到任何好的东西。
所以问题是:我有winform应用程序,根据从菜单栏中选择的选项,加载子表单/视图,这些子表单用于显示报告。
为了生成报告,这些子表单包含报告选择标准,如日期,名称等,这些值来自DB。根据DB中可用的值,我们在视图中添加控件。
当屏幕需要大量时间加载时出现问题,它会在加载过程中冻结我不想要的UI /应用程序。
我还尝试过运行任务异步,但由于它在处理过程中使用了视图,因此该选项失败。
ThreadPool.QueueUserWorkItem(delegate { method.Invoke(presenter, results); });
presenter是我的viewpresenter,结果是调用它的参数。应用程序在运行时结束演示者名称并使用methodinfo.invoke()调用其默认方法。
还有其他方法可以达到目的。
要点:我无法重新设计整个应用程序,将完整的数据库逻辑与UI逻辑分开,因为它是遗留应用程序,这可能会破坏应用程序。
答案 0 :(得分:0)
如果问题是“冻结”,您可以使用doevents,请参阅此处:Use of Application.DoEvents()
或者,您可以采用真正老式的vb6方式:运行同步冻结UI的代码,但是从上面 您的ui的模式窗口。您可以通过事件向用户显示进度指示器。