1.每個(gè)窗體都有自己的都在不同的線程上運(yùn)行,如果需要在窗體之間交互,就需要在線程之間交互。
2.當(dāng)線程Sleep時(shí),系統(tǒng)就退出執(zhí)行隊(duì)列一段時(shí)間,當(dāng)睡眠結(jié)束時(shí),系統(tǒng)會(huì)產(chǎn)生一個(gè)時(shí)鐘中斷,從而
使線程回到執(zhí)行隊(duì)列中,從而恢復(fù)線程的執(zhí)行。
3.如果父線程先于子線程結(jié)束,那么子線程將在父線程結(jié)束的同時(shí)被迫結(jié)束。Thread.Join()方法使父線程等待,直到子線程結(jié)束。
Abort()方法帶來的后果是不可恢復(fù)的終止線程。
4.起始線程可以稱之為主線程,如果所有的前臺(tái)線程都停止了,那么主線程可以終止,而所有的后臺(tái)線程都將無條件終止。
后臺(tái)線程跟前臺(tái)線程只有一個(gè)區(qū)別,那就是后臺(tái)線程不妨礙程序的終止。一旦一個(gè)進(jìn)程所有的前臺(tái)線程都終止后,CLR
將通過調(diào)用任意一個(gè)存活中的后臺(tái)進(jìn)程的Abort()方法來徹底終止進(jìn)程。
6.掛起,睡眠(都可稱為--阻塞,暫停)
與Thread.Sleep 不同,Thread.Suspend 不會(huì)使線程立即停止執(zhí)行。直到線程到達(dá)安全點(diǎn)之后它才可以將該線程掛起。如果線程尚
未啟動(dòng)或已經(jīng)停止,則它將不能掛起。調(diào)用 Thread.Resume 將使另一個(gè)線程跳出掛起狀態(tài)并使該線程繼續(xù)執(zhí)行。
一個(gè)線程不能對(duì)另一個(gè)線程調(diào)用Sleep ,但是一個(gè)線程可以對(duì)另一個(gè)線程調(diào)用Suspend。
還可以使用許多其它的方式來阻塞線程。例如,可以通過調(diào)用 Thread.Join 使一個(gè)線程等待另一個(gè)線程(子線程)停止。使用
Monitor.Wait使一個(gè)線程等待訪問一個(gè)同步對(duì)象。
5.關(guān)鍵字lock可以把一段代碼定義為互斥段(critical section),互斥段在一個(gè)時(shí)刻內(nèi)只允許一個(gè)線程進(jìn)入執(zhí)行,而其他線程必須等待。
多線程公用一個(gè)對(duì)象時(shí),就不應(yīng)該使用lock關(guān)鍵字了,這里Monitor,Monitor提供了使線程共享資源的方案。
Monitor類可以鎖定一個(gè)對(duì)象,一個(gè)線程只有得到這把鎖才可以對(duì)該對(duì)象進(jìn)行操作。
如:
Monitor.Enter(obj);
//現(xiàn)在oQueue對(duì)象只能被當(dāng)前線程操縱了
Monitor.Exit(obj);
6.一個(gè)進(jìn)程開始時(shí)至少會(huì)有一個(gè)主線程 ( 即主執(zhí)行實(shí)例 ) ,這是在系統(tǒng)加載你的程序的時(shí)候所創(chuàng)建的主執(zhí)行流程。
而消息隊(duì)列則是與線程 ( Thread ) 相關(guān)的,在似win2k上一個(gè)線程有一個(gè)且只有一個(gè)消息隊(duì)列 ( queue ) 與之相對(duì)應(yīng)。
消息隊(duì)列是在什么時(shí)候生成的呢? 在似win2k系統(tǒng)上,從一開始創(chuàng)建線程就已經(jīng)有了。
一個(gè)線程可以創(chuàng)建多個(gè)窗體。統(tǒng)發(fā)送給這些窗口的消息都統(tǒng)一發(fā)送到同一個(gè) 消息隊(duì)列 中,幸虧消息結(jié)構(gòu)中有msg.hwnd指出該條消息與
哪一個(gè)窗口相關(guān), DispatchMessage() 函數(shù)就是依照這個(gè)保證消息分派處理自動(dòng)化而且不會(huì)出錯(cuò)!
7.每個(gè)窗體都屬于創(chuàng)建它的線程,在一線程中直接訪或間接問其它線程中的窗體的方法將導(dǎo)致運(yùn)行時(shí)錯(cuò)誤(VS2005)。
解決方法:使用窗體從Control繼承而來的Control.Invoke(Delegate)方法。該方法將在創(chuàng)建窗體的線程上執(zhí)行委托指向的方法。
注意:在VS2003下,可以在一個(gè)線程中直接或間接調(diào)用另一個(gè)線程中的窗體的方法,而不會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。