關於C#影片教學的資源分享
《C# 教學課程》是C#語言的入門課程,在課程中,將從.NET平台和C#的基本概念開始,深入的介紹C#開發的基礎語法、簡單程式邏輯、Visual Studio工具的使用技巧以及常用的演算法的實作。同時,也希望透過與課程相關的練習題和程式設計練習,幫助小夥伴們快速步入C#語言的大門。
課程播放網址:http://www.php.cn/course/84.html
該老師講課風格:
教師講課深入淺出,條理清楚,層層剖析,環環相扣,論證嚴密,結構嚴謹,用思維的邏輯力量吸引學生的注意力,用理智控制課堂教學進程。學生透過聽教師的講授,不僅學到知識,也受到思維的訓練,還受到教師嚴謹的治學態度的熏陶和感染
本視頻中較為難點是C# 多線程了:
一、使用執行緒的理由
1、可以使用執行緒將程式碼同其他程式碼隔離,提高應用程式的可靠性。
2、可以使用執行緒來簡化編碼。
3、可以使用執行緒來實現並發執行。
二、基本知識
1、行程與執行緒:行程作為作業系統執行程式的基本單位,擁有應用程式的資源,行程包含執行緒,行程的資源被執行緒共享,執行緒不擁有資源。
2、前台執行緒與後台執行緒:透過Thread類別新執行緒預設為前台執行緒。當所有前台執行緒關閉時,所有的後台執行緒也會直接終止,不會拋出例外。
3、掛起(Suspend)和喚醒(Resume):由於執行緒的執行順序和程式的執行情況不可預測,所以使用掛起和喚醒容易發生死鎖的情況,在實際應用中應該盡量少用。
4、阻塞執行緒:Join,阻塞呼叫線程,直到該執行緒終止。
5、終止執行緒:Abort:拋出 ThreadAbortException 例外讓執行緒終止,終止後的執行緒不可喚醒。 Interrupt:拋出 ThreadInterruptException 例外讓執行緒終止,透過擷取例外可以繼續執行。
6、執行緒優先權:AboveNormal BelowNormal Highest Lowest Normal,預設為Normal。
三、執行緒的使用
執行緒函數透過委託傳遞,可以不帶參數,也可以帶參數(只能有一個參數),可以用一個類別或結構體封裝參數。
namespace Test { class Program { static void Main(string[] args) { Thread t1 = new Thread(new ThreadStart(TestMethod)); Thread t2 = new Thread(new ParameterizedThreadStart(TestMethod)); t1.IsBackground = true; t2.IsBackground = true; t1.Start(); t2.Start("hello"); Console.ReadKey(); } public static void TestMethod() { Console.WriteLine("不带参数的线程函数"); } public static void TestMethod(object data) { string datastr = data as string; Console.WriteLine("带参数的线程函数,参数为:{0}", datastr); } } }
四、執行緒池
由於執行緒的建立和銷毀需要耗費一定的開銷,過多的使用執行緒會造成記憶體資源的浪費,出於對效能的考慮,於是引入了線程池的概念。執行緒池維護一個請求佇列,執行緒池的程式碼從佇列提取任務,然後委派給執行緒池的一個執行緒執行,執行緒執行完不會被立即銷毀,這樣既可以在後台執行任務,又可以減少執行緒建立和銷毀所帶來的開銷。
執行緒池執行緒預設為後台執行緒(IsBackground)。
namespace Test { class Program { static void Main(string[] args) { //将工作项加入到线程池队列中,这里可以传递一个线程参数 ThreadPool.QueueUserWorkItem(TestMethod, "Hello"); Console.ReadKey(); } public static void TestMethod(object data) { string datastr = data as string; Console.WriteLine(datastr); } } }
#五、Task類別
使用ThreadPool的QueueUserWorkItem()方法發起一次非同步的執行緒執行很簡單,但是該方法最大的問題是沒有一個內建的機制讓你知道操作何時完成,有沒有一個內建的機制在操作完成後得到一個回傳值。為此,可以使用System.Threading.Tasks中的Task類別。
建構一個Task
namespace Test { class Program { static void Main(string[] args) { Task<Int32> t = new Task<Int32>(n => Sum((Int32)n), 1000); t.Start(); t.Wait(); Console.WriteLine(t.Result); Console.ReadKey(); } private static Int32 Sum(Int32 n) { Int32 sum = 0; for (; n > 0; --n) checked{ sum += n;} //结果太大,抛出异常 return sum; } } }
一個任務完成時,自動啟動一個新任務。
一個任務完成後,它可以啟動另一個任務,下面重寫了前面的程式碼,不阻塞任何執行緒。
namespace Test { class Program { static void Main(string[] args) { Task<Int32> t = new Task<Int32>(n => Sum((Int32)n), 1000); t.Start(); //t.Wait(); Task cwt = t.ContinueWith(task => Console.WriteLine("The result is {0}",t.Result)); Console.ReadKey(); } private static Int32 Sum(Int32 n) { Int32 sum = 0; for (; n > 0; --n) checked{ sum += n;} //结果溢出,抛出异常 return sum; } } }
六、委託非同步執行
委託的非同步呼叫:BeginInvoke() 和EndInvoke()
namespace Test { public delegate string MyDelegate(object data); class Program { static void Main(string[] args) { MyDelegate mydelegate = new MyDelegate(TestMethod); IAsyncResult result = mydelegate.BeginInvoke("Thread Param", TestCallback, "Callback Param"); //异步执行完成 string resultstr = mydelegate.EndInvoke(result); } //线程函数 public static string TestMethod(object data) { string datastr = data as string; return datastr; } //异步回调函数 public static void TestCallback(IAsyncResult data) { Console.WriteLine(data.AsyncState); } } }
七、執行緒同步
1)原子操作(Interlocked):所有方法都是執行一次原子讀取或一次寫入操作。
2)lock()語句:避免鎖定public類型,否則實例將超出程式碼控制的範圍,定義private物件來鎖定。
3)Monitor實作執行緒同步
透過Monitor.Enter() 和 Monitor.Exit()實作排它鎖的取得與釋放,取得之後獨佔資源,不允許其他執行緒存取。
還有一個TryEnter方法,請求不到資源時不會阻塞等待,可以設定逾時時間,取得不到直接回傳false。
4)ReaderWriterLock
當對資源操作讀取多寫少的時候,為了提高資源的利用率,讓讀取操作鎖為共享鎖,多個執行緒可以並發讀取資源,而寫入操作為獨佔鎖,只允許一個執行緒操作。
5)事件(Event)類別實作同步
#事件類別有兩種狀態,終止狀態和非終止狀態,終止狀態時呼叫WaitOne可以請求成功,透過Set將時間狀態設為終止狀態。
1)AutoResetEvent(自動重置事件)
2)ManualResetEvent(手動重置事件)
6)信號量( 朗) 接量是由核心物件維護的int變量,為0時,執行緒阻塞,大於0時解除阻塞,當一個信號量上的等待執行緒解除阻塞後,信號量計數+1。
線程透過WaitOne將信號量減1,透過Release將信號量加1,使用很簡單。
7)互斥體(Mutex)
獨佔資源,用法與Semaphore相似。
8)跨進程間的同步
透過設定同步物件的名稱就可以實現系統級的同步,不同應用程式透過同步物件的名稱識別不同同步物件。
以上是關於C#影片教學的資源分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

夸克網盤和百度網盤都是很便利的儲存工具,不少的用戶都在詢問這兩款軟體互通嗎?夸克網盤怎麼分享到百度網盤?下面就讓本站來為用戶們來仔細的介紹一下夸克網盤的文件怎麼保存到百度網盤方法吧。夸克網盤的文件怎麼保存到百度網盤方法1、想要知道怎麼把夸克網盤的文件轉到百度網盤,首先在夸克網盤上下載需要保存的文件,然後打開百度網盤客戶端後,選擇壓縮檔案要儲存的資料夾,雙擊開啟該資料夾。 2、開啟該資料夾後,點選視窗左上角區域的「上傳」。 3、在電腦中找到需要上傳的壓縮文件,點選選

1.首先我們進入到網易雲音樂中,然後在軟體首頁介面中,點選進入到歌曲的播放介面中。 2.然後在歌曲播放介面中,找到右上方的分享功能按鈕,如下圖紅框所示位置,點擊選擇分享的管道;在分享管道中,點擊底部的「分享至」選項,然後選擇第一個“微信朋友圈”,即可將內容分享至微信朋友圈。

近期,百度網盤安卓客戶端迎來了全新的8.0.0版本,這個版本不僅帶來了許多變化,還增添了許多實用功能。其中,最引人注目的便是資料夾共享功能的增強。現在,使用者可以輕鬆邀請好友加入,共同分享工作與生活中的重要文件,實現更便利的協作與分享。那麼究竟該如何分享給好友自己需要分享的文件呢,下文中本站小編就會為大家帶來詳細內容介紹,希望能幫助大家! 1)開啟百度雲APP,先點選在首頁選擇相關的資料夾,再點選介面右上角的【...】圖示;(如下圖)2)接著點選「共用成員」一欄中的【+ 】,最後在勾選所

芒果TV擁有各種類型的電影、電視劇、綜藝等資源,用戶可以在其中自由的選擇觀看。芒果tv會員不僅能夠看到全部的VIP劇而且還能夠設定最高清的畫質,幫助用戶爽快看劇,下面小編就給大家帶來一些芒果tv免費的會員帳號供用戶們使用,趕緊來看一看吧。芒果tv最新會員帳號免費分享2023:注意:都是收集的最新會員帳號,可以直接登入使用,不要隨意的修改密碼。帳號:13842025699密碼:qds373帳號:15804882888密碼:evr6982帳號:13330925667密碼:jgqae帳號:1703

win7企業版啟動金鑰有沒有最新的?如果你安裝的是官方win7企業版,會提示用windows7企業版產品金鑰來激活,否則不能正常使用。所以小編接下來跟大家分享一些win7企業版啟動密碼,大家一起來看看吧。 Q3VMJ-TMJ3M-99RF9-CVPJ3-Q7VF3KGMPT-GQ6XF-DM3VM-HW6PR-DX9G8MT39G-9HYXX-J3V3Q-RPXJB-RQ6D79JBBV-7Q7P7-CTDB7-KYBKG-X8HHCP72QK-2Y3B8-YDHDV-29DQB-QKWWM6JQ

當今人工智慧(AI)技術的發展如火如荼,它們在各個領域都展現了巨大的潛力和影響力。今天大姚給大家分享4個.NET開源的AI模型LLM相關的專案框架,希望能為大家提供一些參考。 https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel是一種開源的軟體開發工具包(SDK),旨在將大型語言模型(LLM)如OpenAI、Azure

標題:解決Discuz微信分享無法顯示的問題,需要具體程式碼範例隨著行動網路的發展,微信成為了人們日常生活中不可或缺的一部分。在網站開發中,為了提升使用者體驗和擴大網站的曝光度,許多網站會整合微信分享功能,讓使用者能夠輕鬆分享網站的內容到朋友圈或微信群組。然而,有時在使用Discuz等開源論壇系統時,會遇到微信分享無法顯示的問題,這給使用者體驗帶來了一定的困
