vb.net多线程问题

weixin_45823259 2019-11-15 10:54:02
Imports System.Threading
Public Class frm_Sim_CalProgress
Inherits System.Windows.Forms.Form
Dim t1 As Thread
Dim t2 As Thread
Dim t3 As Thread

Private Sub ButtonCalculation_Click(sender As Object, e As EventArgs) Handles ButtonCalculation.Click
t1 = New Thread(AddressOf Me.GiveInfo)
t1.Start()
t2 = New Thread(AddressOf Me.GiveProcName)
t2.Start()
t3 = New Thread(AddressOf Me.Execute)
t3.Start()
End Sub

其中我把GiveInfo()、GiveProcName()、Execute()写在了一个模块里

Public Sub GiveInfo()
frm_Sim_CalProgress.pnlCalE.Text = FloatToStrF(CurE, ffFixed, 10, 2)
If CurE < MaxE Then
frm_Sim_CalProgress.ProgressBarCalE.Value =
frm_Sim_CalProgress.ProgressBarCalE.Maximum * (MaxE - CurE) / MaxE
Else
frm_Sim_CalProgress.ProgressBarCalE.Value = 0
End If
End Sub

Public Sub GiveProcName()
frm_Sim_CalProgress.pnlProcName.Text = ProcName
End Sub

出现了错误


...全文
321 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2019-12-13
  • 打赏
  • 举报
回复

        Dim t1 As New Task(Sub() Invoke(Sub() GiveInfo()))
        t1.Start()
        Dim t2 As New Task(Sub() Invoke(Sub() GiveProcName()))
        t2.Start()
        Dim t3 As New Task(Sub() Invoke(Sub() Execute()))
        t3.Start()
Hodgins-k 2019-12-02
  • 打赏
  • 举报
回复
用task应该好一些
xiaoid 2019-11-25
  • 打赏
  • 举报
回复
在线程里不能直接访问控件,必须使用委托 。
良朋 2019-11-25
  • 打赏
  • 举报
回复
建议你用task. 用lamda表达式,c#里面用=>,vb.net里用Function,百度一下就会了。
58662877 2019-11-18
  • 打赏
  • 举报
回复
你的三个过程在模块里面,为何你在窗体用Me?而且你的子线程是不能直接去修改主线程的UI的。
jhonsonzhang 2019-11-16
  • 打赏
  • 举报
回复
你这样写多线程的意义在哪里。 跟直接写 Me.GiveInfo Me.GiveProcName Me.Execute 有什么不同。用new thread 装B么?即不异步处理结果,也不需要并发处理。这种多线程写法无意义。非要用,建议使用task
清晨曦月 元老 2019-11-15
  • 打赏
  • 举报
回复
多线程已经七窍通六窍鸟^ ^

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧