窗体该如何保持重绘?

Anakin_Skywalker 2006-11-15 08:16:58
我的窗体由于执行了一个长时间计算的函数,常常在函数执行过程中失去响应,也看不见进度条了,窗体一片空白,这样我就没法估计计算时间了。

有没有办法在函数里强制窗体重绘,让我看见进度条啊?

听说Thread.Sleep(1)可以,可是我试过了,窗体仍然会变成一片白
...全文
176 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Anakin_Skywalker 2006-11-15
  • 打赏
  • 举报
回复

非常感谢,虽然我不是全明白,但的确实现了我要的效果

现在倒是因为随时都响应点击等操作,有可能触发新的计算导致数据不一致,不过我把控件控制一下就好啦
bianchen 2006-11-15
  • 打赏
  • 举报
回复
用方法的异步调用,在函数计算的过程中窗体不会变白,窗体上的的进度条也可以继续
  Private conponents As System.ComponentModel.Container = Nothing
Public Delegate Function MyDelegate() As Integer
Dim iscanceled As Boolean = False
Dim re As Integer
Dim asyncDelegate As New MyDelegate(AddressOf Me.ProcessTask)
Dim ar As IAsyncResult  
  Public Function ProcessTask() As Integer
Dim mythread As System.Threading.Thread
Dim i As Integer
For i = 0 To 100
If (Me.iscanceled) Then Exit Function
ProgressBar1.Value = i
mythread.Sleep(100)
Next
Return i
End Function
Public Sub resultsCB(ByVal result As IAsyncResult)
re = asyncDelegate.EndInvoke(ar)
Dim mi As New MethodInvoker(AddressOf Me.updateUI)
Me.BeginInvoke(mi)
End Sub

调用你的计算方法时请写如下代码:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.iscanceled = False
Me.Cursor = Cursors.WaitCursor
Dim cb As New AsyncCallback(AddressOf Me.resultsCB)
ar = asyncDelegate.BeginInvoke(cb, Nothing)
Me.Cursor = Cursors.Default
End Sub
sx_lxh 2006-11-15
  • 打赏
  • 举报
回复
为什么不给长时间计算的函数重开个线程?

16,554

社区成员

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

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