Thread in C# Windows Form
網路上充滿著許多Thread的筆記,MSDN也有範例,大部分都是console那我就直接從我常用的Windows Form 開始吧…
環境:
Win7 64位元、
Visual Studio 2013
1.建立專案
2.拉個元件
3.像個初學者一樣寫段簡單的程式
4.執行
厄運馬上降臨,發生錯誤訊息,對於常寫Windows Form 的人而言都知道,
可視元件要用Thread控制都得經過一番處理,
於是我直接搜尋C++常搜尋的Synchronize 外加C#,找到了MSDN的範例,使用lock的方式。
那…我們就像初學者一樣再試一次好了!!
結果是多麼令人心碎,但沒關係,我們要有冒險的精神!這次…我們直接將訊息視窗中,
[如何跨執行續呼叫Windows Form控制項]給它點下去
(OS:為什麼不一開始就這麼做呢?人總有犯傻、假會的時後…),然後有樣學樣的改了一下程式。
再一次的執行。
終於!程式正常執行了!但是問題來了…一個可視元件寫一個委派函式…如果我有1000個就要寫1000個!!!?
這時就要搬出BCB的精神出來了!BCB只要將委派函式丟到Synchronize中(EX: Synchronize(MyFunc))就好啦!
只要委派函式符合格式void Method(void),都可放再Synchronize,然後可視元件都在委派函式中執行就好!
這樣就能將所有可視元件通通放在函式中,看起來比較親民,最後我將它打包程BCB Style 的class TThread,但用上面的就行了,下面只是自我感覺良好的寫法。每當我想要用執行續只要把它拉來繼承就差不多了,不用再找說委派是什麼鬼,要怎麼呼叫,
2020.02.13 update
現在的我已經不使用TThread了,我們重頭來過
直接使用 Invoke 呼叫程式,
或者你可以寫成 Lambda 來省略 MyFunc()
程式關閉前記得將執行序終止
兩種方法,一種像上面的Abort()直接中斷
另一種是讓執行序內的程式做完結束
但無窮迴圈沒有做完的一天,所以要加旗標
有時候我會希望程式是做完告一段落
在結束執行序,避免一些問題發生
參考:
留言列表