如何在主表单工作时显示正在旋转的GIF

时间:2017-03-04 11:03:58

标签: vb.net gif ui-thread

我正在使用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继续旋转,同时完成所有工作。

我知道如果我把循环放在一个线程中一切正常,但我也希望避免这种情况,因为每次我的应用程序必须做大量工作时,我都不会创建和启动一个线程

任何人都有想法实现这个目标吗?

提前谢谢大家。

0 个答案:

没有答案