在vb.net程序中,执行一段程序需要点时间,程序运行执行时,不想让用户觉得是电脑死机了,想加个进度条。请问怎么实现?

ruan1978 2019-04-10 08:52:53
我的ok事件运行时,程序需要点时间,想让用户等待时,用进度条动态的运转,让用户感觉程序没有死机,请问如何来实现?或者一个思路?
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
...
... '这句语句开始需要载入有进度条的窗口
...
...
...
... ’到这里结束,进度条关闭
...
End Sub

请问这个怎么实现?
...全文
403 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
轻鸿万里 2019-06-20
  • 打赏
  • 举报
回复
引用 9 楼 tengwei6328 的回复:
简单的方式: for i=0 to 100 'do something '进度条显示 Application.DoEvents() '重要的是这句话,界面不会失去响应的。 next
这个可以有,用VB6写的时候经常这样显示进度,说白了就是一个消息队列。 用上了.NET也可以这样,但是有的人更喜欢使用子线程形式,把进度值抛给一个进度窗显示出来。
tengwei6328 2019-06-19
  • 打赏
  • 举报
回复
简单的方式: for i=0 to 100 'do something '进度条显示 Application.DoEvents() '重要的是这句话,界面不会失去响应的。 next
red_max 2019-06-18
  • 打赏
  • 举报
回复
添加BackgroundWorker控件
用BackgroundWorker1_ProgressChanged写进度条,具体可查帮助
sanlide 2019-05-25
  • 打赏
  • 举报
回复
把要执行的代码放入新的线程执行
jhonsonzhang 2019-04-18
  • 打赏
  • 举报
回复
我来弄个更简单明了的
dim btnExeOver as integer=0
button_click
btnexover=1
me.begininvoke(sub()
me.processbar.visible=true
do while btnexeover=1
sub()
dim curBar=processbar.value
curbar+=10
if curbar>=100 then
curbar=0
end if
me.processbar.value=curbar
end while
me.processbar.visible=false
end sub
end sub)
。。。。。'执行代码
btnexeOver=0
  • 打赏
  • 举报
回复
这里的 Await 配合 Task.Delay,这中 Task 技术是自动进行线程切换的,在第一次执行到 Task.Delay 的时候实际上 Button1_Click 方法就已经结束了,然后 123毫秒之后回调 Await 左边以及后边的代码。然后编译器知道后边的代码需要在主线程运行,所以它产生了完美取代传统的 Timer 定时器的 Task 代码。有了 Task 技术那么以后你就再也不用学习复杂的 Timer 组件了。
  • 打赏
  • 举报
回复
给你写一个 demo 吧。
Public Class Form1

    Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.Button1.Enabled = False
        For i = 0 To 100
            Me.ProgressBar1.Value = i
            Await Task.Delay(123)
        Next
        Me.Button1.Enabled = True
    End Sub
End Class
注意使用到 async/await 编程技术,那么 vb.net 编译器会自动处理主线程、子线程切换问题,就不需要你考虑 Invoke 语句了!
FainSheeg 2019-04-10
  • 打赏
  • 举报
回复
正如SP大神所说,关键是要懂得另起线程来执行耗时操作,如果还是在主线程执行的话,就算加了进度条也是不会动的。
  • 打赏
  • 举报
回复
要设置进度条的刻度,不外乎就是类似
Me.ProgressBar1.Invoke(Sub()
                            Me.ProgressBar1.Value = 90
                        End Sub)
这样的代码。关键是要理解“不在 UI 主线程执行”的道理。
  • 打赏
  • 举报
回复
比如说,用户点击窗口右上角的“小叉子、最小化”等按钮能关闭窗口或者最小化窗口吗?用户用鼠标拖动窗口能行吗?假设窗口中还有其它按钮、文本框等等,用户还能及时操作吗? 你这个 btnOK_Click 方法中应该以异步方式来运行一个耗时操作,例如使用 Task.Run 来启动一个子任务,而不应该在 UI 主线程中来执行耗时操作! 首先学会编程在子线程中执行。

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧