【发布时间】:2022-01-12 01:08:25
【问题描述】:
我有一个包含超过 3000 个项目的列表框的对话框窗口,最初加载需要很长时间。为了加载这个对话框,我创建了一个实例var dlg = new frmDlg();,然后当我需要这个对话框时,我用dlg.ShowDialog(this);打开它虽然这减少了需要初始化列表框的时间,但仍然需要很长时间才能显示对话框关闭后从内存中卸载对话框,需要重新加载可视元素。有什么办法可以防止这种情况发生吗?使用普通表单,我只会隐藏窗口而不是关闭它,但这似乎不适用于对话框窗口。
【问题讨论】:
-
拦截 FormClosing 事件。设置
e.Cancel = true;和this.Hide()。即使它是一个对话框,这也会隐藏它。 -
加载时间过长 - 从 DB 调用 3000 个项目?您可以做什么,加载您的项目列表,然后将其传递到对话框中,然后设置列表框
datasource -
BOB,正如我在问题中提到的,我尝试隐藏窗口而不是关闭它,但这不起作用。 ShowDialog 返回时,表单仍会卸载。
-
TS,加载时间长的是列表框本身。初始化列表框中的项目后,我永远不会更改它们。问题是当对话框关闭时,.NET 从内存中卸载列表框的可视部分,然后在再次调用 ShowDialog 时将其从列表框对象重新加载到可视内存中。