从form_load事件处理程序显示表单并显示进度条

时间:2013-01-28 08:36:08

标签: vb.net

以下是我不知道如何在.Net中正确完成的一些事情,但我确信某些解决方案肯定存在。

我有一个像对话框那样打开的表单,在(表单)form_load下我有一些数据检查,之后我调用一个可能需要10秒钟处理的程序。
在这段时间里,我的表格没有显示,直到我的流程没有完成,我可以在我的主表单中看到一些“菜单垃圾”而不是正在处理的新表格中的进度条。

我看到的第二件事可能接近第一个问题是,在我的某些表单中,当某个进程的结果显示但程序(进度条)正确生成时,进度条不会结束。看起来就像是在一些异步任务中使用进度条。

如何解决这些问题并在我的程序开始之前显示我的表格? 如何获得进度条以显示值可靠?或者我可以说它在VB6中有效吗?

对于第一个问题,我尝试:

Me.Activate
or 
Me.Refresh

Call myProcedureWithProgressBar(myArgs)

从Form_Load但没有结果。
表格在我的程序结束时显示,但应该在之前显示。

1 个答案:

答案 0 :(得分:1)

事件Form_Load执行之前的代码显示Form。您可以创建Timer并使用它在表单加载后自动执行代码:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Timer1.Start()
End Sub

Private Sub OnFormLoaded(sender As Object, e As EventArgs) Handles Timer1.Tick
    Timer1.Enabled = False

    '...
End Sub

并确保像我一样停止方法上的计时器,并确保阻止用户执行可能与执行相关的操作(单击按钮,关闭表单...)。希望它有所帮助。


关于ProgressBar问题,如果没有更多信息或代码,我不知道会出现什么问题。也许你可以尝试这样的事情:

Public Sub UpdateProgressBar(ByVal cont As Integer, ByVal max As Integer, ByRef objTarget As ProgressBar)
    Dim dProgress As Double = cont * 100 / max
    objTarget.Value = CInt(dProgress)
    objTarget.Refresh()
End Sub