【问题标题】:Asking tutorial for VB.NET Thread求VB.NET Thread教程
【发布时间】:2011-06-07 18:07:09
【问题描述】:

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

【问题讨论】:

    标签: vb.net winforms multithreading


    【解决方案1】:

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

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

    希望对你有帮助!

    【讨论】:

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

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

    【讨论】:

    • 我知道如何使用后台工作者。但我只想知道值如何返回给它的调用者。你见过短信库吗?当我调用 msgbox(objGSM.IMEI) 时,我可以访问应用程序中的其他菜单,而无需等待对象处理结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多