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了,我們重頭來過

image

直接使用 Invoke 呼叫程式,

或者你可以寫成 Lambda 來省略 MyFunc()

image

程式關閉前記得將執行序終止

兩種方法,一種像上面的Abort()直接中斷

另一種是讓執行序內的程式做完結束

但無窮迴圈沒有做完的一天,所以要加旗標

image

有時候我會希望程式是做完告一段落

在結束執行序,避免一些問題發生

 

 

參考:

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 史克威爾凱特 的頭像
    史克威爾凱特

    史克威爾凱特的部落格

    史克威爾凱特 發表在 痞客邦 留言(0) 人氣()