十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
你真心無聊。
成都創(chuàng)新互聯(lián)專業(yè)做網(wǎng)站、成都做網(wǎng)站,集網(wǎng)站策劃、網(wǎng)站設(shè)計、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營銷、軟文推廣等專業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計,讓網(wǎng)站在運行后,在搜索中有好的表現(xiàn),專業(yè)設(shè)計制作為您帶來效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。
多線程就是這樣的。界面線程是主線程,你這個Form_Load就是運行在主線程上的線程,而Thread1,Thread2是由主線程啟動的。這個啟動不是線性的。
主線程只是通知系統(tǒng),請啟動一個線程運行某某函數(shù)。
而哪個線程先運行完全在系統(tǒng)決定。甚至可能主線程執(zhí)行到Thread1.Abort() ,Thread2.Abort()的時候這兩個線程都還沒有啟動起來,所以你會遇到兩個變量都是空值這種情況。
這是不可避免的,除非更換電腦硬件,讓處理器及內(nèi)存處理得更快,或是不要用自帶的 Panel 和 Label 控件,自定義一個容器,內(nèi)容自繪。
卡頓主要原因:
1、控件多了,電腦必然會慢,因為在 Windows 里每個控件都相當(dāng)于一個窗口,有自己的句柄,系統(tǒng)需要維護(hù)對應(yīng)的窗口消息,那么一定會卡頓,只能緩解不能消除。
2、可以用多線程,在子線程中更新控件,通過委托的方式通知主線程,可以有效緩解卡頓的問題。
慢的問題,VS打開要慢些,但運行速度應(yīng)該差不多。
你說的彈出框是不是指“智能代碼提示”?大家都覺得VS版本越高越好用啊,不知道你說的究竟是什么問題,要不留聯(lián)系看看。vb6你輸錯了馬上來一個對話框,同時發(fā)出聲音,能把人嚇一跳,完全沒有VS方便啊。
以下是在多線程中顯示進(jìn)度條代碼
'定義一個委托
Delegate Sub dl_ShowProgress(ByVal iValue As Integer)
Public Sub ShowProgress(ByVal iValue As Integer)
If ProgressBar1.IsDisposed Then
Return
End If
If ProgressBar1.InvokeRequired = True Then
Dim pInvoke As New dl_ShowProgress(AddressOf ShowProgress)
Me.Invoke(pInvoke, New Object() {iValue})
Else
ProgressBar1.Value = iValue
ProgressBar1.Refresh()
End If
End Sub
'在多線程中調(diào)用ShowProgress(*)函數(shù)
多線程并不一定就可以縮短時間,具體要看你上面的“過程”是否調(diào)用數(shù)據(jù)庫完成。如果調(diào)用了數(shù)據(jù)庫,可以考慮用存儲過程替代“過程”。另外看看“過程”里是否反復(fù)打開和關(guān)閉了數(shù)據(jù)庫連接,如果是,這才是真正的耗時動作。如果沒調(diào)用數(shù)據(jù)庫,可以考慮使用Parallel類(.net4以后)里面的函數(shù),使多個任務(wù)在多核CPU上并行運行,縮短時間。
這個沒法做到。原因
1)當(dāng)你將方法排入線程池隊列后,此方法在有線程池線程變得可用時執(zhí)行。
2)線程池中某個線程的可用與不可用,是由.net 后臺決定,用戶程序無法控制的
3)正如你觀察到的:線程啟動的時間不同,有快有慢,這恰恰說明線程池起作用了:線程池的調(diào)度試圖讓程序響應(yīng)達(dá)到最佳。