询问VB.NET线程教程

询问VB.NET线程教程,vb.net,winforms,multithreading,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

我有一个名为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
时,主窗体将没有响应。如何防止我的表单没有响应。用户可以访问其他菜单,而无需等待结果。有人能帮我吗?

使用
BackgroundWorker
在工作线程中运行它。这将使您的GUI保持响应。

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


希望有帮助

您的循环正在从0循环到99999999,并且每个停止当前线程的循环延迟100毫秒。一个更好的解决方案是使用定时器,检查您已完成的情况,并在必要时重新启动定时器。这样,您的主窗体线程将始终响应。

我知道如何使用后台工作程序。但我只想知道值如何返回给它的调用者。你看过短信库吗。当我调用msgbox(objGSM.IMEI)时,我可以访问应用程序中的其他菜单,而无需等待对象处理结果。您可以直接将值返回到GUI对象,并将其包含在一个try。。。挡块。那么跨线程调用就不会大惊小怪了。我还是不明白你的问题。+1:不过,我确实为你改进了格式和语法。我知道如何使用后台工作人员。但我只想知道值如何返回给它的调用者。你看过短信库吗。当我调用msgbox(objGSM.IMEI)时,我可以访问应用程序中的其他菜单,而无需等待对象处理结果。