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
出現了錯誤
uj5u.com熱心網友回復:
多執行緒已經七竅通六竅鳥^ ^uj5u.com熱心網友回復:
你這樣寫多執行緒的意義在哪里。跟直接寫
Me.GiveInfo
Me.GiveProcName
Me.Execute
有什么不同。用new thread 裝B么?即不異步處理結果,也不需要并發處理。這種多執行緒寫法無意義。非要用,建議使用task
uj5u.com熱心網友回復:
你的三個程序在模塊里面,為何你在表單用Me?而且你的子執行緒是不能直接去修改主執行緒的UI的。uj5u.com熱心網友回復:
在執行緒里不能直接訪問控制元件,必須使用委托 。uj5u.com熱心網友回復:
建議你用task. 用lamda運算式,c#里面用=>,vb.net里用Function,百度一下就會了。uj5u.com熱心網友回復:
用task應該好一些uj5u.com熱心網友回復:
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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/86359.html
標籤:VB.NET
