<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
執行緒:對於所有需要等待的操作,例如移動檔案,資料庫和網路存取都需要一定的時間,此時就可以啟動一個新的執行緒,同時完成其他任務。一個程序的多個執行緒可以同時執行在不同的CPU上或多核CPU的不同核心上。
一個應用程式啟動時,會啟動一個程序(應用程式的載體),然後程序會啟動多個執行緒。
使用Thread類可以建立和控制執行緒,Thread建構函式是一個無參無返回值的委託型別。
1️⃣對Thread傳入一個無參無返回型別的方法-ThreadStart。
public delegate void ThreadStart();
範例:
static void test() { Console.WriteLine("test is start"); Console.WriteLine("test is running"); Thread.Sleep(3000); Console.WriteLine("test is completed"); } static void Main(string[] args) { Thread th = new Thread(test); th.Start(); Console.WriteLine("main is completed"); }
2️⃣對Thread傳入一個匿名方法(或lambda表示式)。用於傳入的方法程式碼簡單的情況
static void Main(string[] args) { //lambad表示式 Thread th = new Thread(()=> { Console.WriteLine("子執行緒1-ID:" + Thread.CurrentThread.ManagedThreadId); }); th.Start(); //匿名方法 Thread th2 = new Thread(delegate () { Console.WriteLine("子執行緒2-ID:" + Thread.CurrentThread.ManagedThreadId); }); th2.Start(); Console.WriteLine("main is completed"); }
3️⃣對Thread傳入一個無返回值有參方法-ParameterizedThreadStart,該引數只能是object型別且只能有一個引數。
public delegate void ParameterizedThreadStart(object? obj);
範例:
static void download(object o) { string str = o as string; Console.WriteLine("地址:" + str); } static void Main(string[] args) { Thread th = new Thread(download); th.Start("http://baidu.com"); Console.WriteLine("main is completed"); }
注意:使用as進行強制型別轉換 成功會正確輸出,失敗會輸出null。
以上資料傳輸的方法都是基於靜態變數進行傳輸的,但是定義過多靜態變數會導致多個執行緒存取同一個靜態變數,造成資源衝突。
靜態變數雖然方便存取,但是靜態的一般都是公共的,容易混亂。
4️⃣對Thread傳入一個無返回值多個引數的方法(定義一個結構體),但是不能用as強制轉換。
public struct data { public string message; public int age; } static void download(object o) { data str = (data)o;//強制型別轉換 Console.WriteLine("資訊:" + str.message); Console.WriteLine("年紀:" + str.age); } static void Main(string[] args) { data da = new data(); da.message = "sss"; da.age = 3; Thread th = new Thread(download); th.Start(da); Console.WriteLine("main is completed"); }
由於結構體是值型別,不能為null,因此不能用as進行強制型別轉換。
5️⃣通過自定義類傳遞資料(即將通過執行緒呼叫一個類的成員方法)
先建立一個download類:
class downLoad { public string URL { get; private set; } public string Message { get; private set; } //建構函式 public downLoad(string uRL, string message) { URL = uRL; Message = message; } //下載方法 public void load() { Console.WriteLine("從" + URL + "獲取資訊:" + Message); } }
在主程式中將該類的成員方法傳入Thread中:
static void Main(string[] args) { var download = new downLoad("www.baidu.com", "mp4"); Thread th = new Thread(download.load); th.Start(); Console.WriteLine("main is completed"); Console.ReadKey(); }
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45