1

关于如何避免渲染此表单的长时间延迟有什么建议吗?

我有一个带有“请稍候,正在下载”标签的用户表单,没有其他控件。当用户请求数据下载(异步 API 请求)时,我关闭键盘输入,并显示“请稍候”表单。处理数据的回调重新启用键盘输入并隐藏表单。奇迹般有效。

除了它最初会弹出一个空白的白色矩形,然后需要几秒钟(多达 5 秒钟)来绘制。我的其他用户表单(模式,用于数据输入)立即绘制我什至从未注意到它们开始时是白色的。

这是我在发出异步数据请求之前显示表单的方式:

' Deactivate the keyboard.
Application.OnKey "^d", "KeyboardOn"
Application.DataEntryMode = True

' Display the splash form non-modally.
ssiWaitDialog.TaskDone = False
ssiWaitDialog.Show False

以下是它在回调中的删除方式:

' Close the splash form.
ssiWaitDialog.TaskDone = True
ssiWaitDialog.Hide

' Re-activate the keyboard.
Application.DataEntryMode = False

这是表单代码:

' Set true when the long task is done.
Public TaskDone As Boolean

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Cancel = Not TaskDone
End Sub

问题表单的属性值仅与我的其他表单 modal=false 显着不同,并且我已将光标设置为沙漏。不太显着的差异是高度/宽度和标签字体大小。

4

1 回答 1

2

在 show 方法调用后添加“DoEvents”解决了问题。以下是显示表单代码现在的读取方式:

' Deactivate the keyboard.
Application.OnKey "^d", "KeyboardOn"
Application.DataEntryMode = True

' Display the splash form non-modally.
ssiWaitDialog.TaskDone = False
ssiWaitDialog.Show False
DoEvents
于 2012-09-24T19:27:15.667 回答