詳細(xì)查看了你的問題,完全不需要使用線程sleep的方法。
成都創(chuàng)新互聯(lián)公司是專業(yè)的鄂溫克網(wǎng)站建設(shè)公司,鄂溫克接單;提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行鄂溫克網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
在這邊,我要給你引入一個(gè)概念。就是Form窗體的兩個(gè)方法。
Form.Show()和Form.ShowDialog()
第一個(gè)Show方法運(yùn)行后,你的主程序還是會(huì)進(jìn)行,你的代碼還是會(huì)繼續(xù)進(jìn)行下去。此時(shí),窗體還是彈出的。
第二個(gè)ShowDialog方法運(yùn)行后,此時(shí),彈出的一個(gè)窗體,你不將其關(guān)閉,那么,主程序就會(huì)一直等待這個(gè)窗體關(guān)閉后,才執(zhí)行后面的代碼。
所以,你只需要使用showdialog這個(gè)方法,即可達(dá)到你想要的結(jié)果。
那么,如何才能讓彈出的窗體不改變呢?很簡(jiǎn)單
你可以找到窗體的formcloseing事件,在這個(gè)事件中,有一個(gè)參數(shù):e
這個(gè)e有一個(gè)屬性,就是e.handle,表示是否處理過這個(gè)事件了。
這個(gè)時(shí)候,如果你不想讓窗體關(guān)閉,你可以寫:
e.handle=true,那么表示已經(jīng)處理過窗體關(guān)閉的事件了。
注:有些情況,可能是:e.cancel=true
使用api
Private Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
并沒有看出什么地方可能導(dǎo)致程序假死,這排版也太亂了.不妨調(diào)試一下程序,當(dāng)出現(xiàn)你說的"假死"后暫停一下程序,看看線程都卡在哪里.
另外,從設(shè)計(jì)上來看,你這里并不需要多線程操作.
用time控件啊,獲取threadstate后,按指定時(shí)間間隔規(guī)定向界面刷新,線程必須是全局變量
用一個(gè)有退出條件的無(wú)限循環(huán)的sub也行。
線程開始就觸發(fā)該過程,用無(wú)限循環(huán)來刷新狀態(tài),線程完成即退出無(wú)限循環(huán)。局部變量的線程也可以用這種方式。
不過用法要正確,否則會(huì)出問題。
暫停,就是除恢復(fù)外所有操作都無(wú)效,你可以用一變量來控制,不需掛起。
在你給textbox設(shè)置text值后直接使用sleep(),因?yàn)樵谑褂胹leep()的時(shí)候,當(dāng)前的主進(jìn)程是被掛起了,也就是說設(shè)置的text屬性后,還來不及在屏幕上顯示lbi的內(nèi)容就執(zhí)行了sleep,所以在執(zhí)行sleep()掛起主進(jìn)程前,你必須讓textbox的內(nèi)容先顯示出來再執(zhí)行sleep,可嘗試使用下DoEvents()將控制權(quán)暫時(shí)移交一下,讓系統(tǒng)有時(shí)機(jī)來刷新textbox里面的內(nèi)容,讓系統(tǒng)有機(jī)會(huì)來刷新textbox里面的內(nèi)容。由于我沒有安裝visual studio的開發(fā)環(huán)境,無(wú)法調(diào)試代碼的正確性,但我記得我以前也遇到此類問題,采取的DoEvents()的方式。你可嘗試下。
lbl.Visible = True
Sleep(5000)
lbl.Text = "我是中國(guó)人"
lbi.Refresh '刷新一下lbi,具體你可以調(diào)試下,看需要不需要這條
Application.DoEvents() ‘設(shè)置完lbi的text屬性,將操作權(quán)限釋放一下,讓系統(tǒng)有機(jī)會(huì)顯示lbi的內(nèi)容。
Sleep(3000) ’待顯示后,再執(zhí)行掛起
lbl.Text = "我愛自己的祖國(guó)"
lbi.Refresh ‘同上
Application.DoEvents() ’同上
DoEvents()的功能解釋是:轉(zhuǎn)讓控制權(quán),以便讓操作系統(tǒng)處理其它的事件。
如執(zhí)行一次不行,可嘗試重復(fù)多執(zhí)行幾次,特別在循環(huán)語(yǔ)句中,對(duì)于窗口的刷新顯示DoEvents特別有用,但是在循環(huán)體內(nèi)使用了DoEvents后,當(dāng)前進(jìn)程的執(zhí)行效率會(huì)有大幅降低,因?yàn)橐平豢刂茩?quán)必然損失當(dāng)前進(jìn)程的運(yùn)行效率。