真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

.NET中怎么實現(xiàn)多線程執(zhí)行函數(shù)

本篇文章給大家分享的是有關(guān).NET中怎么實現(xiàn)多線程執(zhí)行函數(shù),小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了南丹免費建站歡迎大家使用!

1.多線程調(diào)用無參函數(shù)                                                                                 

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading;  namespace 多線程 {     class Program     {         static void Main(string[] args)         {             Console.WriteLine("主線程開始");             Thread t = new Thread(new ThreadStart(ShowTime));//注意ThreadStart委托的定義形式             t.Start();//線程開始,控制權(quán)返回Main線程             Console.WriteLine("主線程繼續(xù)執(zhí)行");             //while (t.IsAlive == true) ;             Thread.Sleep(1000);             t.Abort();             t.Join();//阻塞Main線程,直到t終止             Console.WriteLine("--------------");             Console.ReadKey();         }         static void ShowTime()         {             while (true)             {                 Console.WriteLine(DateTime.Now.ToString());                            }         }     } }

注意ThreadStart委托的定義如下:

.NET中怎么實現(xiàn)多線程執(zhí)行函數(shù)

可見其對傳遞進(jìn)來的函數(shù)要求是:返回值void,無參數(shù)。

2.多線程調(diào)用帶參函數(shù)(兩種方法)   

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading;  namespace 多線程2_帶參數(shù) {     class Program     {         static void Main(string[] args)         {             Console.WriteLine("Main線程開始");             Thread t = new Thread(new ParameterizedThreadStart(DoSomething));//注意ParameterizedThreadStart委托的定義形式             t.Start(new string[]{"Hello","World"});             Console.WriteLine("Main線程繼續(xù)執(zhí)行");              Thread.Sleep(1000);             t.Abort();             t.Join();//阻塞Main線程,直到t終止             Console.ReadKey();         }         static void DoSomething(object  s)         {             string[] strs = s as string[];             while (true)             {                 Console.WriteLine("{0}--{1}",strs[0],strs[1]);             }         }     } }

注意ParameterizedThreadStart委托的定義如下:

.NET中怎么實現(xiàn)多線程執(zhí)行函數(shù)

可見其對傳入函數(shù)的要求是:返回值void,參數(shù)個數(shù)1,參數(shù)類型object

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading;  namespace 多線程2_帶參數(shù)2 {        class Program     {         static void Main(string[] args)         {             Guest guest = new Guest()              {              Name="Hello", Age=99             };             Thread t = new Thread(new ThreadStart(guest.DoSomething));//注意ThreadStart委托的定義形式             t.Start();              Thread.Sleep(1000);             t.Abort();             t.Join();//阻塞Main線程,直到t終止             Console.ReadKey();         }     }     //     class Guest     {         public string Name { get; set; }         public int Age { get; set; }          public void DoSomething()         {             while (true)             {                 Console.WriteLine("{0}--{1}", Name, Age);             }         }     } }

這個還是使用ThreadStart委托,對方法進(jìn)行了一個封裝。

兩種方法,可隨意選擇,***種貌似簡潔一點。

3.線程同步

線程同步的方法有很多很多種volatile、Lock、InterLock、Monitor、Mutex、ReadWriteLock...

這里用lock說明問題:在哪里同步,用什么同步,同步誰?

首先感受下不同步會出現(xiàn)的問題:

.NET中怎么實現(xiàn)多線程執(zhí)行函數(shù)

代碼就是下面的代碼去掉lock塊。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading;  namespace 多線程3_同步2 {     class Program     {         static object obj = new object();//同步用          static int balance = 500;          static void Main(string[] args)         {             Thread t1 = new Thread(new ThreadStart(Credit));             t1.Start();              Thread t2 = new Thread(new ThreadStart(Debit));             t2.Start();              Console.ReadKey();         }          static void Credit()         {             for (int i = 0; i < 15; i++)             {                 lock (obj)                 {                     balance += 100;                     Console.WriteLine("After crediting,balance is {0}", balance);                 }             }         }         static void Debit()         {             for (int i = 0; i < 15; i++)             {                 lock (obj)                 {                     balance -= 100;                     Console.WriteLine("After debiting,balance is {0}", balance);                 }             }         }     } }

小結(jié):多線程調(diào)用函數(shù)就是這樣。在Winform中,控件綁定到特定的線程,從另一個線程更新控件,不應(yīng)該直接調(diào)用該控件的成員,這個非常有用。

以上就是.NET中怎么實現(xiàn)多線程執(zhí)行函數(shù),小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前題目:.NET中怎么實現(xiàn)多線程執(zhí)行函數(shù)
URL分享:http://weahome.cn/article/ijeecs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部