You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让数组内的类实例独立运行?VB.NET代码问题求助

问题分析与解决方案

问题根源

你的代码卡死是因为所有逻辑都在UI单线程执行:

  • 在循环创建my_class实例时,调用mc.process()会立刻进入死循环,此时global_variable还没被设置为536,且后续设置global_variable的代码完全没机会运行,UI线程被彻底阻塞,程序自然冻结。

修复方案

要让代码正常运行,必须让每个my_class的process方法在后台线程执行,避免阻塞UI线程;同时对全局变量counter的修改做线程安全处理,防止多线程竞争问题。

修改后的完整代码

模块部分

Module Module1
    Public global_variable As Integer
    Public array(156) As my_class
    Public counter As Integer
    ' 用于同步counter的线程锁
    Private counterLock As New Object()
End Module

类部分

Public Class my_class
    Public Sub process()
        ' 在后台线程执行循环逻辑
        Threading.ThreadPool.QueueUserWorkItem(Sub()
            Do
                If global_variable = 536 Then
                    ' 线程安全地修改counter
                    SyncLock Module1.counterLock
                        Module1.counter += 1
                    End SyncLock
                    Exit Do
                End If
                ' 短暂休眠,减少CPU占用
                Threading.Thread.Sleep(10)
            Loop
        End Sub)
    End Sub
End Class

窗体部分

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Static casual As New Random
        Dim mynumber, k As Integer

        ' 重置全局状态,避免多次点击按钮出现异常
        Module1.global_variable = 0
        Module1.counter = 0

        For k = 0 To 156
            Dim mc As New my_class
            array(k) = mc
            mc.process() ' 现在会在后台启动线程,不会阻塞UI
        Next

        MessageBox.Show("所有实例已启动后台检查!")

        Do
            mynumber = casual.Next(0, 2001)
            global_variable = mynumber
            ' 短暂休眠,避免循环占用过高CPU
            Threading.Thread.Sleep(10)
            If counter = 157 Then Exit Do
        Loop

        MessageBox.Show("主循环已退出!")
    End Sub
End Class

关键修改说明

  • 多线程执行:使用ThreadPool.QueueUserWorkItem让每个process的循环在后台线程运行,UI线程不会被阻塞,后续设置global_variable的代码能正常执行。
  • 线程安全:用SyncLock保护counter的修改,防止多个线程同时修改导致计数错误。
  • CPU优化:添加Thread.Sleep(10)减少空循环的CPU占用,避免程序过度消耗资源。

内容的提问来源于stack exchange,提问作者Fabrizio Nitro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:10:30