并沒有看出什么地方可能導(dǎo)致程序假死,這排版也太亂了.不妨調(diào)試一下程序,當(dāng)出現(xiàn)你說的"假死"后暫停一下程序,看看線程都卡在哪里.
成都創(chuàng)新互聯(lián)公司的客戶來自各行各業(yè),為了共同目標(biāo),我們?cè)诠ぷ魃厦芮信浜希瑥膭?chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對(duì)我們的要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領(lǐng)域包括網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、電商網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺(tái)開發(fā)。
另外,從設(shè)計(jì)上來看,你這里并不需要多線程操作.
并沒有看出什么地方可能導(dǎo)致程序假死,這排版也太亂了.不妨調(diào)試一下程序,當(dāng)出現(xiàn)你說的"假死"后暫停一下程序,看看線程都卡在哪里.
另外,從設(shè)計(jì)上來看,你這里并不需要多線程操作.
“卡死”是一個(gè)非常主觀的描述,如果你要讓主線程殺掉卡死的線程,那么你必須給“卡死”做出準(zhǔn)確的定義。
什么是卡死?30秒沒有響應(yīng)就是卡死?那么“沒有響應(yīng)”的定義又是什么?
你給出這些條件以后,殺掉一個(gè)線程就不難。Abort方法,Dispose方法,都可以。
試試這個(gè)怎么樣,添加在子進(jìn)程里面,就加在你批量傳輸代碼里的每一個(gè)傳輸后面,也就是大批量中的每傳輸一個(gè)數(shù)據(jù)就暫停一下,而不是每一個(gè)大批量才暫停一下
System.Threading.Thread.Sleep(10) '讓它走慢一點(diǎn)
原因很簡單
你是定義了一個(gè)T的新線程,但是很可惜你在BeginDoSub這個(gè)獨(dú)立的線程中又定義了一個(gè)deSomeSub的委托,并且直接用Me.Invoke把實(shí)際的執(zhí)行任務(wù)提交給界面主線程運(yùn)行了
所以你的圖片的處理函數(shù)實(shí)際上是在主線程中運(yùn)行的,新線程等于沒用
正確的作法是,T定義為SomeSub這個(gè)函數(shù)為入口的線程,并啟動(dòng)它
在界面進(jìn)度條更改的時(shí)候再使用Invoke來調(diào)用委托來進(jìn)行界面更改。
多線程是用于處理復(fù)雜項(xiàng)目的
打個(gè)比方
你的主程序線程A中有個(gè)循環(huán),由于代碼是一行行走的,所以循環(huán)結(jié)束前下面的代碼無法運(yùn)行,而此時(shí)主界面的反應(yīng)就類似卡死的樣子,你點(diǎn)擊按鈕也沒有反應(yīng),因?yàn)橹骶€程在忙著循環(huán)呢,所以對(duì)按鈕的事件代碼要等待了,如果要避免這種情況,就要用到多線程,另開一個(gè)新線程專門用來執(zhí)行循環(huán)代碼,主界面就不會(huì)卡死了,只要在循環(huán)結(jié)束后將結(jié)果傳回主線程調(diào)用就可以了,再復(fù)雜點(diǎn)要涉及到委托,控制了
按你的要求其實(shí)你的代碼用不到多線程,只要把sleep放到兩段代碼中間就可以了。
新線程結(jié)束用thread.abort()