请教VB.NET Thread教程

时间:2011-06-07 18:07:09

标签: vb.net winforms multithreading

我有一个名为TestClass的类

Public Class TestClass

    Private _Count As Integer


    Public ReadOnly Property Count() As Integer
        Get
            For i As Integer = 0 To 999999999
                Threading.Thread.Sleep(100)
            Next

            Return 100
        End Get
    End Property

End Class

形成主要表格,我称之为课程。这是我的代码:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim tg As New TestClass
    MsgBox(tg.Count)

End Sub

当我从主表单中调用tg.Count时,主表单将无法响应。如何防止我的表单没有响应。用户可以访问其他菜单而不是等待结果。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

使用BackgroundWorker在工作线程中运行它。这将使您的GUI响应。 http://www.dreamincode.net/forums/topic/88605-the-background-worker/

BackgroundWorker组件从工具箱拖到表单上。现在,将您的计数器循环放在BackgroundWorker_DoWork事件处理程序中,该处理程序是为您自动生成的。您现在需要做的就是在其上调用RunWorkerAsync

希望它有所帮助!

答案 1 :(得分:0)

你的循环从0循环到999999999并且每个循环延迟100ms,这将停止当前线程。更好的解决方案是使用计时器,检查已完成的状况并在必要时重新启动计时器。这样,您的主表单线程将始终响应。