【中低階級】-執行緒Thread-使用-1

更新 發佈閱讀 5 分鐘

  當我們要使用執行緒的時候,就要引用System.Threading的類別庫,程式才可以使用唷!使用的內容包括:建立與啟用執行緒、跨執行緒控制UI介面、等待或暫停時間執行緒、共享資源、安全鎖(lock)、互斥鎖(mutex)、監測執行緒(monitor)、號誌(semaphore)、前景與背景執行緒。

使用引用地方就是寫程式的最上面,如下:

raw-image

一、建立與啟用執行緒

1.簡單建立與執行

  簡單先建立一個執行緒,這邊用「-」表主執行緒在執行,「*」表另一條執行緒執行。用下面這樣寫的方式程式執行的順序會是怎麼樣呢?我們用迴圈方式讓程式跑一下看結果,盡量迴圈次數多一點才足以瞭解執行順序狀況哦!

raw-image
raw-image

可以見到它是用交錯的方式在執行直到程式內容做完。


2.傳入建構函式的委派

使用執行緒時會使用到委派,它有兩種模式:

(1)無帶參數:像上面的例子。
(2)有帶參數:看下面這個例子。

raw-image
raw-image

這邊建立兩個執行緒,而這兩個執行緒都會做相同的事,但是執行緒是不同的,也可以比喻為不同人在做相同的事。


3.跨執行緒控制UI介面

當我們在執行緒中要直接控制UI介面的元件時,系統就會發出錯誤:

跨執行緒作業無效: 所使用的執行緒與建立控制項的執行緒不同。但在主程式中控制UI介面時則會正常執行。實際看一下它們的執行結果:

(1)執行緒控制UI與主程式控制UI差異

[執行緒直接操作UI介面]

raw-image
raw-image

[主程式直接控制 UI ]

raw-image
raw-image

這下該怎麼辦呢?


(2)執行緒控制UI方法

A.設定元件的屬性

多新增一行更改屬性的值,也就是

CheckForIllegalCrossThreadCalls = false;

這個屬性意思就是:「是否要攔截不該存取,卻要存取控制項」。但是這會不穩定,有可能會有不可預期的錯誤,因此要

使用的時候要三思!!!

B.使用委派(delegate)

raw-image
raw-image
raw-image

使用委派的方法是較穩妥的一個方式,另外還有一個使用BackGroundWork可以看下面所列的參考資料。


4.等待或暫停時間執行緒

A.等待

當我們想要讓執行緒先做完再做主程式的事,那麼就使用Join()的方法,大家可以試試看。

raw-image
raw-image

B.暫停

當我們想要讓執行緒稍等一下也就是暫停執行,那麼就可以使用Sleep()這個方法(Sleep的時間單位為毫秒)

raw-image


5.共享資源

當我們主程式在使用執行緒時,對於宣告為全域的變數在執行緒的函式中式可以直接使用的,我們用累加的方式來看一下不同執行緒產生的結果。(這邊共享資源為全域變數的count)

raw-image
raw-image

這邊t5、t6兩個執行緒都會去執行Thread5這個函式,我們給予暫停時間來記錄一下兩個執行緒執行的結果,可看出有兩條執行緒真的有執行Thread5這個函式,第一條count+1(也就是0+1=1),第二條count+1(也就是1+1=2)。

那麼假若在主程式中t5、t6兩個執行緒的暫停時間都設為一樣時,結果就只會出現1個(也就是=2),因為兩條執行緒並行執行了。(這邊我就不放圖了,大家可以自己操作看看)


下次分享安全鎖(lock)相關內容,包括mutex、monitor等等,也會有號誌(semaphore)相關內容唷~


參考資料:
1.C# 多執行緒 – (2) .NET操作篇
2.C# 學習筆記:多執行緒 (2) - 分道揚鑣
3.C# 執行緒中更新UI方式
4.忽略跨线程访问的错误 CheckForIllegalCrossThreadCalls = false
5.多線程中InvokeRequired和Invoke的用法,講的很清楚
6.C#: BackgroundWorker 非同步 / 多執行緒 / 背景運算
7.多個 Thread 共用變數

留言
avatar-img
橙果杏的沙龍
26會員
43內容數
Hello~ Welcome to my blog~❤ 這邊會分享我在程式這條道路中的學習與成長, 過程中從而了解自己的不足,再學習。 希望透過分享的方式, 也讓正在學習程式的夥伴們一起學習, 我們一起加油吧~ 「彼此都會成為彼此之間的影響力」(´,,•ω•,,)♡ ❣
橙果杏的沙龍的其他內容
2024/07/30
一、什麼是WinSocket? 也就是大家常說的WinSock全名為Windows Sockets API (WSA),它會透過TCP/IP通訊協定來做網路的通訊,會用在Windows操作系統上來開發網路應用的API(應用程式介面)   二、WinSocket用在哪裡?   Socket可以
Thumbnail
2024/07/30
一、什麼是WinSocket? 也就是大家常說的WinSock全名為Windows Sockets API (WSA),它會透過TCP/IP通訊協定來做網路的通訊,會用在Windows操作系統上來開發網路應用的API(應用程式介面)   二、WinSocket用在哪裡?   Socket可以
Thumbnail
2024/06/29
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
2024/06/29
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
2024/06/20
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
2024/06/20
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
  當我們要使用執行緒的時候,就要引用System.Threading的類別庫,程式才可以使用唷!這篇內容先說明:建立與啟用執行緒、跨執行緒控制UI介面、等待或暫停時間執行緒、共享資源的部分。
Thumbnail
  當我們要使用執行緒的時候,就要引用System.Threading的類別庫,程式才可以使用唷!這篇內容先說明:建立與啟用執行緒、跨執行緒控制UI介面、等待或暫停時間執行緒、共享資源的部分。
Thumbnail
  在說執行緒(Thread)時就要先知道什麼是程式(Program)、程序(Process),才能了解什麼是執行緒(Thread),因為它們間都有著神秘的關係與關聯,再更深入一點就又會有多程序(muti-Process)、多執行緒(muti-Thread),我們就先一一說明好了,了解它們後再使用時
Thumbnail
  在說執行緒(Thread)時就要先知道什麼是程式(Program)、程序(Process),才能了解什麼是執行緒(Thread),因為它們間都有著神秘的關係與關聯,再更深入一點就又會有多程序(muti-Process)、多執行緒(muti-Thread),我們就先一一說明好了,了解它們後再使用時
Thumbnail
Web Workers主要提供簡單的API讓網頁在背景執行緒中執行程式而不干擾使用者的操作。 javascript主要功能是與user操作頁面互動及操作dom,試想若使用多執行緒的概念,那麼一個動作是新增至某個dom節點,另一個動作則是修改該dom節點,此時瀏覽器應該使用哪個動作為準? 所以為了避免
Thumbnail
Web Workers主要提供簡單的API讓網頁在背景執行緒中執行程式而不干擾使用者的操作。 javascript主要功能是與user操作頁面互動及操作dom,試想若使用多執行緒的概念,那麼一個動作是新增至某個dom節點,另一個動作則是修改該dom節點,此時瀏覽器應該使用哪個動作為準? 所以為了避免
Thumbnail
介紹 委派的非同步方法 可以透過BeginInvoke執行委派的非同步方法 Action<T>.BeginInvoke(<T> obj,AsyncCallback callback,Object @object) 第一個內容的 obj,只的是要傳入acction委派的參數 第二個AsyncCallb
Thumbnail
介紹 委派的非同步方法 可以透過BeginInvoke執行委派的非同步方法 Action<T>.BeginInvoke(<T> obj,AsyncCallback callback,Object @object) 第一個內容的 obj,只的是要傳入acction委派的參數 第二個AsyncCallb
Thumbnail
介紹 📷 定義 處理序(Process) (大陸:進程): 一個程序運行時,占用全部計算資源的總和 執行緒(Thread) (大陸:線程):是作業系統能夠進行運算排程的最小單位。 大部分情況下,它被包含在行程之中,是行程中的實際運作單位。 C#多線程和異步(一)——基本概念和使用方法 執行緒帶來的
Thumbnail
介紹 📷 定義 處理序(Process) (大陸:進程): 一個程序運行時,占用全部計算資源的總和 執行緒(Thread) (大陸:線程):是作業系統能夠進行運算排程的最小單位。 大部分情況下,它被包含在行程之中,是行程中的實際運作單位。 C#多線程和異步(一)——基本概念和使用方法 執行緒帶來的
Thumbnail
介紹 計算機架構相關名詞 📷 中央處理器 (CPU)Central Processing Unit Processors (處理器) Sockets (實體插槽) Cores (實體核心) Logical processors (邏輯核心) 超執行緒(HT)Hyper-Threading Tec
Thumbnail
介紹 計算機架構相關名詞 📷 中央處理器 (CPU)Central Processing Unit Processors (處理器) Sockets (實體插槽) Cores (實體核心) Logical processors (邏輯核心) 超執行緒(HT)Hyper-Threading Tec
Thumbnail
前言 這是第一次寫技術文章,但其實應該也只能說是蒐集很多資料並學習如何透過自己的話解釋的內容,並不能像其他大神可能分享一些很酷的技術,目標就單純是為了完成最後一週的作業(如下)。 走入非同步之前 執行環境(Execution Context) 執行環境堆疊 (Execution stack)
Thumbnail
前言 這是第一次寫技術文章,但其實應該也只能說是蒐集很多資料並學習如何透過自己的話解釋的內容,並不能像其他大神可能分享一些很酷的技術,目標就單純是為了完成最後一週的作業(如下)。 走入非同步之前 執行環境(Execution Context) 執行環境堆疊 (Execution stack)
Thumbnail
行程(進程、process)、執行緒(線程、thread)、上下文切換(context switch)、行程控制塊(PCB)、行程排班(process scheduler)、行程狀態、執行緒模式
Thumbnail
行程(進程、process)、執行緒(線程、thread)、上下文切換(context switch)、行程控制塊(PCB)、行程排班(process scheduler)、行程狀態、執行緒模式
Thumbnail
這一篇文章將會從Microsoft的.NET Class Library開始介紹,在介紹具狀態和不具狀態,以及物件和new關鍵字。
Thumbnail
這一篇文章將會從Microsoft的.NET Class Library開始介紹,在介紹具狀態和不具狀態,以及物件和new關鍵字。
Thumbnail
本篇文章將會介紹C#的基礎構成和字串的使用,若想要更詳細的教學,可以參考前一篇文章,前往Microsoft官方教學學習。
Thumbnail
本篇文章將會介紹C#的基礎構成和字串的使用,若想要更詳細的教學,可以參考前一篇文章,前往Microsoft官方教學學習。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News