在我的vb.net winform应用程序中,点击开始按钮,label1.text应该是“进程启动”,然后一些文件存储方法将在完成该方法之后运行,label1.text应该更改为“文件已保存”。
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
lblStatus.ForeColor = Color.Red
lblStatus.Text = "Saving to File"
'Get the values and write to xls
Trigger()
SaveXls()
lblStatus.Text = "File Saved"
lblStatus.ForeColor = Color.Green
End Sub
标签“保存到文件”的初始状态不会出现。触发方法完成后,标签的状态将更改为“文件已保存”
有什么建议吗?
答案 0 :(得分:5)
您需要使用标签的Refresh()方法。使用Application.DoEvents有副作用,应该小心使用(这不适合它)。
答案 1 :(得分:1)
替代其他两个答案(我的偏好)是使用Background Worker来执行Trigger()
和SaveXls()
。
您的代码将类似于:
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
lblStatus.ForeColor = Color.Red
lblStatus.Text = "Saving to File"
If backgroundWorker1.IsBusy <> True Then
' Start the asynchronous operation.
backgroundWorker1.RunWorkerAsync()
End If
End Sub
Private Sub backgroundWorker1_DoWork(ByVal sender As System.Object, _
ByVal e As DoWorkEventArgs) Handles backgroundWorker1.DoWork
'Get the values and write to xls
Trigger()
SaveXls()
End Sub
Private Sub backgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, _
ByVal e As RunWorkerCompletedEventArgs) Handles backgroundWorker1.RunWorkerCompleted
If e.Cancelled = True Then
lblStatus.Text = "Canceled!"
lblStatus.ForeColor = Color.Black
ElseIf e.Error IsNot Nothing Then
lblStatus.Text = "Error: " & e.Error.Message
Else
lblStatus.Text = "File Saved"
lblStatus.ForeColor = Color.Green
End If
End Sub
使用后台工作程序还会在后台操作发生时保持表单响应,而不是冻结它。
答案 2 :(得分:1)
最初设置标签文本后,使用form1.refresh()刷新表单。然后执行Trigger()和SaveXls()函数,最后将标签文本更改为“filesaved”。
感谢所有回复和努力
答案 3 :(得分:0)
更新lblStatus标签后,您需要暂时停止阻止代码。您可以尝试在第一次标签更新后添加Application.DoEvents
。否则,表单将等待刷新,直到整个代码块完成执行。 Application.DoEvents
将暂停当前线程,处理Windows消息,然后在完成后继续执行。