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

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

请问这个怎么实现?
...全文
476 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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,721

社区成员

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

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