LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C# 實現(xiàn)多線程啟動停止暫停繼續(xù)

admin
2025年6月13日 10:21 本文熱度 286

前言

多線程編程是提升應用程序性能和響應能力的關鍵技術之一。C# 提供了強大的多線程支持,能夠輕松創(chuàng)建并發(fā)任務,優(yōu)化資源利用,并改善用戶體驗。然而,實現(xiàn)多線程的同時,如何安全有效地管理這些線程(如啟動、停止、暫停和繼續(xù))是一個重要的問題。

大部分初學者在學習C#上位機編程時,多線程是一個很難逾越的鴻溝,不合理地使用多線程,會導致經(jīng)常出現(xiàn)各種奇怪的問題,這也是很多初學者不敢使用多線程的原因。但是在實際開發(fā)中,多線程是一個不可避免的技術棧,基本上每個項目都會使用到,因此學好多線程技術,很重要。

本文將深入探討如何使用 C# 實現(xiàn)多線程的啟動、停止、暫停和繼續(xù)功能。我們將介紹相關的理論基礎,分享實用代碼示例,并討論最佳實踐和常見問題的解決方案。

多線程原理

什么是多線程?

多線程是一種編程技術,允許一個程序同時運行多個獨立的執(zhí)行流程,每個執(zhí)行流程稱為一個線程。通過這種方式,程序可以提高并發(fā)性和效率,更有效地利用系統(tǒng)資源。

單核CPU與多線程

想象一下創(chuàng)業(yè)初期的情景:你可能需要身兼多職,既要處理業(yè)務,又要負責技術支持,還要管理財務。雖然你看似在“同時”完成這些任務,但實際上你是通過高效的時間管理來快速切換不同職責,從而營造出多任務并行的假象。

這正是單核CPU實現(xiàn)多線程的方式——通過時間片輪轉(Time-Slicing)機制,CPU在極短的時間間隔內(通常為10-100毫秒)快速切換不同的線程,使得用戶感覺所有任務都在同時進行。

多核CPU與多線程

隨著計算機技術的進步,現(xiàn)代CPU大多具備多個核心(如8核、16核等),每個核心都可以獨立執(zhí)行任務。這種多核架構真正實現(xiàn)了多線程的優(yōu)勢:多個線程可以在不同的核心上同時運行,從而使多段邏輯能夠并行處理。

充分利用多核CPU的多線程能力,不僅可以顯著提升應用程序的性能,還能最大限度地發(fā)揮硬件潛力。如果不使用多線程,就如同擁有一輛高性能跑車卻只用于日常代步,未能充分發(fā)揮其優(yōu)勢。

多線程發(fā)展

多線程的重要性與挑戰(zhàn)

盡管多線程技術能夠顯著提升代碼的執(zhí)行效率和CPU資源利用率,許多開發(fā)者仍然對其望而卻步。主要原因在于,如果使用不當,多線程可能會引發(fā)各種難以調試的問題,如競態(tài)條件、死鎖和數(shù)據(jù)不一致等。

理解多線程的本質

重要的是要認識到,多線程本質上是"不可控"的。不應將其視為簡單的開關機制——需要時開啟,不需要時關閉。實際上,多線程的執(zhí)行依賴于CPU調度器的決定。

當我們說"啟動多線程"時,實際上是告訴操作系統(tǒng)這個線程可以運行了,但具體何時開始或停止,則由CPU根據(jù)當前系統(tǒng)狀態(tài)來決定。因此,開發(fā)人員只能通過間接的方式控制線程的行為。

.NET 框架中的多線程演進

微軟在多線程支持方面不斷進步,.NET 框架也經(jīng)歷了多個版本的迭代:

.NET 1.0:引入了 Thread 類,提供了基本的多線程支持。

.NET 2.0:推出了 ThreadPool 線程池,提高了線程管理和資源利用的效率。

.NET 3.0:引入了 Task 類,簡化了并發(fā)任務的管理,并逐漸成為多線程編程的最佳實踐。

.NET 4.0:增加了 Parallel 類庫,支持并行編程,進一步提升了復雜任務處理的能力。

.NET 4.5:引入了 async/await 關鍵字,使得異步編程更加簡潔直觀,極大地方便了編寫非阻塞代碼。

控制多線程的方法

.NET 框架提供的接口(方法)允許開發(fā)人員間接地控制多線程的啟動、停止、暫停和繼續(xù)。這些工具不僅簡化了多線程編程,還提高了代碼的安全性和可靠性。

例如:

啟動線程:使用 Thread.Start() 或 Task.Run() 來啟動新線程或任務。

停止線程:通過設置取消標記或使用 CancellationToken 安全終止線程。

暫停與繼續(xù)線程:利用信號量、事件等待句柄 (EventWaitHandle) 和其他同步原語實現(xiàn)線程的暫停和恢復。



多線程啟停

Task 類是 .NET 中用于處理多線程和異步操作的核心類之一,提供了豐富的 API 函數(shù),使得多線程管理變得更加簡單和直觀。Task 支持多種啟動方式,如 Task.Run、Task.Factory.StartNew 和 Start 等。

下面將以 Task.Run 為例,演示如何使用多線程實現(xiàn)一個簡單的案例。

創(chuàng)建一個簡單的程序,其中包含一個值類型的變量,該變量每間隔 100 毫秒自增一次,當達到某個設定值后重新從零開始計數(shù),并將當前值顯示在界面上。這個例子展示了如何在后臺線程中執(zhí)行重復任務,并安全地更新 UI 線程上的控件。



所以該任務執(zhí)行代碼如下:



我們可以看到在方法里調用了一個cts對象,這個對象就是CancellationTokenSource的對象,因此我們需要創(chuàng)建一個CancellationTokenSource對象cts,同時在屬性CurrentValue中,要顯示控件的值,這里需要用到委托實現(xiàn)跨線程訪問的問題,這個我們后續(xù)專題講解,代碼如下:



然后在啟動線程按鈕的事件里,編寫代碼如下:



停止線程按鈕的事件里,只需要調用cts的Cancel方法即可:



我們可以看到,這里就是通過cts來控制cts的IsCancellationRequested屬性,進而實現(xiàn)多線程的控制,這里的cts.IsCancellationRequested類似于一個布爾類型的標志位,但是CancellationTokenSource的作用不僅如此,還可以在此基礎上實現(xiàn)多線程超時判斷,注冊事件等更復雜的多線程操作。

多線程暫停繼續(xù)

多線程的暫停繼續(xù),.NET為我們提供了另外一個對象——ManualResetEvent,這個對象會有一個值,這個值是布爾類型,就像一個門閘一樣,True是打開門閘,F(xiàn)alse是關閉門閘,所以想要暫停多線程就調用這個對象的Reset方法,想要繼續(xù)多線程就調用這個對象的Set方法,使用非常簡單。首先我們創(chuàng)建一下這個對象,可以通過構造方法,給這個對象賦初始值,我這里為True,這樣就能直接運行,不會阻塞,代碼如下:



但是如果希望這個對象與多線程有所聯(lián)系,必須要在多線程的方法里體現(xiàn)這個對象的作用,這個是調用這個對象的WaitOne方法,表示在調用的地方阻塞住,通過判斷True或者False來決定是否繼續(xù)執(zhí)行,就像大家開車過高速收費站一樣,即使現(xiàn)在普遍采用ETC了,在入口也需要減速,有一個ETC識別的過程,識別成功才會抬桿,識別不對,桿子是不會自動抬起的,這個是一樣的道理。所以線程執(zhí)行代碼修改如下:



對比一下,其實就是加了一個manual.WaitOne()。線程暫停繼續(xù)代碼如下:



暫停繼續(xù)的使用除了ManualResetEvent,還有一個AutoResetEvent,AutoResetEvent和ManualResetEvent的用法基本上是一樣的,這里就不過多贅述,大家可以自己嘗試一下。

這兩者的區(qū)別在于一個是手動,一個是自動,AutoResetEvent會在置位之后自動復位,這樣體現(xiàn)在多線程里,就是會只執(zhí)行一次,就像大家進小區(qū)一樣,如果有10輛車在排隊,這時候如果自動模式,每次都要抬桿落桿,每次只允許進一輛車,如果是手動模式,可以由保安控制門閘打開,等10輛車都進去之后,再由保安將門閘關閉。

總結

多線程技術雖然強大,但也伴隨著一定的復雜性和風險。理解其本質,并熟練掌握 .NET 框架提供的工具和最佳實踐,可以幫助大家更好地面對這些問題,充分利用多核 CPU 的性能優(yōu)勢。隨著 .NET 框架的不斷演進,多線程編程變得越來越簡單和安全,為程序開發(fā)提供了堅實的基礎。


該文章在 2025/6/13 10:22:06 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
婷定香花五月天中文字幕在线 | 欧美久久久久久久一区二区三区 | 天堂精品视频一区二区 | 色综合久久久久久久久久 | 亚洲人成网站在线在线观看 | 天堂久久久久九色 |