用time控件啊,獲取threadstate后,按指定時間間隔規(guī)定向界面刷新,線程必須是全局變量
創(chuàng)新互聯(lián)制作網(wǎng)站網(wǎng)頁找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁設(shè)計,成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計,網(wǎng)站設(shè)計,企業(yè)網(wǎng)站搭建,網(wǎng)站開發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為1000多家服務(wù),創(chuàng)新互聯(lián)網(wǎng)站建設(shè)將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷推廣服務(wù)!
用一個有退出條件的無限循環(huán)的sub也行。
線程開始就觸發(fā)該過程,用無限循環(huán)來刷新狀態(tài),線程完成即退出無限循環(huán)。局部變量的線程也可以用這種方式。
不過用法要正確,否則會出問題。
我給你一個簡單的思路:
1,定義5個公共布爾變量,用來記錄5個線程的執(zhí)行情況
2,線程開始變量賦值假,執(zhí)行完畢或者異常退出賦值真
3,一直用一個定時器掃描5個公共布爾變量----------隨時知道狀態(tài)
原因很簡單
你是定義了一個T的新線程,但是很可惜你在BeginDoSub這個獨立的線程中又定義了一個deSomeSub的委托,并且直接用Me.Invoke把實際的執(zhí)行任務(wù)提交給界面主線程運行了
所以你的圖片的處理函數(shù)實際上是在主線程中運行的,新線程等于沒用
正確的作法是,T定義為SomeSub這個函數(shù)為入口的線程,并啟動它
在界面進度條更改的時候再使用Invoke來調(diào)用委托來進行界面更改。
.net 為了安全,默認(rèn)不允許跨線程訪問操作控件。只能誰創(chuàng)建了控件,誰操作。
這個textbox只能從主線程訪問。
解決方案一般有兩個
1. 使用委托機制。委托創(chuàng)建線程去訪問
2. 設(shè)置Me.CheckForIllegalCrossThreadCalls = False 表示不檢測跨線程錯誤