我正在使用VB.NET编写的Windows表单应用程序,我喜欢显示一个旋转轮(GIF),而应用程序工作时没有UI冻结,没有任何延迟显示GIF,但是所有工作完成后才会显示gif。
在我的表格中,我有一个开始所有工作的按钮。
Public Class Form1
Private _pb As PictureBox
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim t As New Task(AddressOf ShowSpinningGif)
t.Start()
Dim a As Integer = 0
Dim b As Integer = 999999999
For i As Integer = 0 To b
a += 1
Next
Dim t1 As New Task(AddressOf EndSpinningGif)
t1.Start()
End Sub
Public Sub ShowSpinningGif()
Dim pb As New PictureBox
With pb
.Image = My.Resources.b
.BringToFront()
.Show()
End With
If Me.InvokeRequired Then
Me.Invoke(Sub()
Me.Controls.Add(pb)
End Sub)
Else
Me.Controls.Add(pb)
End If
End Sub
Public Sub EndSpinningGif()
If Me.InvokeRequired Then
Me.Invoke(Sub()
_pb.Dispose()
End Sub)
Else
_pb.Dispose()
End If
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
CheckForIllegalCrossThreadCalls = False
Application.EnableVisualStyles()
End Sub
End Class
我尝试过使用Thread和BackgroundWorker类,但都是这样。
我不介意更改GIF或使用包含彩绘或类似内容的UserControl,但我想避免更改鼠标指针或使用ProgressBar。
我知道循环正在冻结UI线程,但我希望将图像放在另一个线程上GIF继续旋转,同时完成所有工作。
我知道如果我把循环放在一个线程中一切正常,但我也希望避免这种情况,因为每次我的应用程序必须做大量工作时,我都不会创建和启动一个线程
任何人都有想法实现这个目标吗?
提前谢谢大家。