Sub Main() Dim thr As New Thread(AddressOf 循環(huán)) thr.Start("a") End Sub Sub 循環(huán)(a() As String) '這里隨你干什么循環(huán)也行 For Each i As String In a MsgBox(i) Next End Sub
成都服務(wù)器托管,創(chuàng)新互聯(lián)建站提供包括服務(wù)器租用、資陽(yáng)移動(dòng)機(jī)房、帶寬租用、云主機(jī)、機(jī)柜租用、主機(jī)租用托管、CDN網(wǎng)站加速、域名注冊(cè)等業(yè)務(wù)的一體化完整服務(wù)。電話咨詢:18982081108
雖然你的想法是在 LoginBtn_Click 事件中將復(fù)雜的操作分離出去以減輕UI的負(fù)擔(dān), 這很好完全沒(méi)有問(wèn)題.
但是問(wèn)題在于 Me.Invoke(dh)這里,若是ChkLogin里面仍然是大規(guī)模的操作呢 你的代碼就又變成將很復(fù)雜的操作扔給了UI, 當(dāng)然會(huì)出現(xiàn)窗體無(wú)法拖動(dòng)的情況了.
解決辦法很簡(jiǎn)單, 很多種. 將ChkLogin()里的操作直接放在DelegateLogin()里面吧 me.invoke僅僅只是做簡(jiǎn)單的輕量的刷新之類的操作就好了.
希望能幫上你的忙.
Sub Main()
Dim thr As Thread
For Pi As Integer=0 To 4 //啟用5線程
MulParams =Pi vbTab sFile vbTab dFile vbTab 1 vbTab DelN vbTab cr vbTab cg vbTab cb vbTab IndexI
GlobalParamas(pi)=MulParams .Split(vbTab)
thr=New Thread(AddressOf MyMulThreadCaller)
thr.Start() //啟動(dòng)多線程進(jìn)程
Application.DoEvents
Next
End Sub
多線程是用于處理復(fù)雜項(xiàng)目的
打個(gè)比方
你的主程序線程A中有個(gè)循環(huán),由于代碼是一行行走的,所以循環(huán)結(jié)束前下面的代碼無(wú)法運(yùn)行,而此時(shí)主界面的反應(yīng)就類似卡死的樣子,你點(diǎn)擊按鈕也沒(méi)有反應(yīng),因?yàn)橹骶€程在忙著循環(huán)呢,所以對(duì)按鈕的事件代碼要等待了,如果要避免這種情況,就要用到多線程,另開(kāi)一個(gè)新線程專門用來(lái)執(zhí)行循環(huán)代碼,主界面就不會(huì)卡死了,只要在循環(huán)結(jié)束后將結(jié)果傳回主線程調(diào)用就可以了,再?gòu)?fù)雜點(diǎn)要涉及到委托,控制了
按你的要求其實(shí)你的代碼用不到多線程,只要把sleep放到兩段代碼中間就可以了。
新線程結(jié)束用thread.abort()