国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

簡單對比C#程序中的單線程與多線程設計

2019-10-29 21:29:16
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了C#程序中的單線程與多線程設計的簡單對比,通過實際的代碼演示可以清晰看出多線程并發來避免單線程阻塞問題的特點,需要的朋友可以參考下
 

多線程概念

1.一個正在運行的應用程序在操作系統中被視為一個進程,進程可以包括多個線程。線程是操作系統分配處理器時間的基本單位
2.應用程序域是指進行錯誤隔離和安全隔離,在CLR中運行,每個程序域都是單個線程啟動,但該程序域中的代碼可以創建附加應用程序域和附加線程
3.多線程的優點在于一個線程阻塞的時候,CUP可以運行其他的線程而不需要等待,這樣大大的提高了程序的執行效率。而缺點在于線程需要占用內存,線程越多占用的內存就多,多線程需要協調和管理,所以需要占用CPU時間以便跟蹤線程,線程之間對共享資源訪問會互相影響,所以得解決爭用共享資源的問題,線程太多,也會導致控制起來更復雜,最終導致很多程序的缺陷。
4.一個進程可以創建多個線程以執行與該進程關聯的部分程序代碼,線程使用Tread處理

C#單線程與多線程對比:

單線程:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading;  namespace Stockes {   public partial class DeletgateThread : Form   {     public DeletgateThread()     {       InitializeComponent();       CheckForIllegalCrossThreadCalls = false;//允許跨線程調用     }     public delegate void writeTxt(char chr);//定義委托     public writeTxt writetxt;//聲明委托     public void write(string str, writeTxt writes)//使用委托     {       for (int i = 0; i < str.Length; i++)       {         writes(str[i]);         DateTime now = DateTime.Now;         while (now.AddSeconds(1) > DateTime.Now) { }       }     }     private void text1(char chr)     {       textBox1.AppendText(chr.ToString());     }     public void text2(char chr)     {       textBox2.AppendText(chr.ToString());     }     private void stratWrite()     {           if (checkBox1.Checked)       {         textBox1.Clear();         groupBox4.Text = "正在運行。。";         groupBox2.Refresh();         writetxt = new writeTxt(text1);         write(textBox3.Text.Trim(),writetxt);       }       if(checkBox2.Checked)       {         textBox2.Clear();         groupBox5.Text = "正在運行。。";         groupBox3.Refresh();         writetxt = new writeTxt(text2);         write(textBox3.Text.Trim(),writetxt);       }     }     private void button1_Click(object sender, EventArgs e)     {       Thread tr = new Thread(new ThreadStart(stratWrite));//創建線程       tr.Start();//啟動線程     }        } }  

  
多線程、并發任務:  

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading;  namespace Stockes {   public partial class DeletgateThread : Form   {     public DeletgateThread()     {       InitializeComponent();       CheckForIllegalCrossThreadCalls = false;//允許跨線程調用     }     public delegate void writeTxt(char chr);//定義委托     public writeTxt writetxt;//聲明委托     public void write(string str, writeTxt writes)//使用委托     {       for (int i = 0; i < str.Length; i++)       {         writes(str[i]);         DateTime now = DateTime.Now;         while (now.AddSeconds(1) > DateTime.Now) { }       }     }     private void text1(char chr)     {       textBox1.AppendText(chr.ToString());     }     public void text2(char chr)     {       textBox2.AppendText(chr.ToString());     }     private void stratWrite()     {       if (checkBox1.Checked)       {         textBox1.Clear();         textBox1.Refresh();         groupBox4.Text = "正在運行。。";         groupBox2.Refresh();         writetxt = new writeTxt(text1);         write(textBox3.Text.Trim(),writetxt);       }     }     private void stratwrite1()     {       if (checkBox2.Checked)       {         textBox2.Clear();         textBox2.Refresh();         groupBox5.Text = "正在運行。。";         groupBox3.Refresh();         writetxt = new writeTxt(text2);         write(textBox3.Text.Trim(), writetxt);       }     }     private void button1_Click(object sender, EventArgs e)     {       Thread tr = new Thread(new ThreadStart(stratWrite));//創建線程       tr.Start();//啟動線程       Thread tr1 = new Thread(new ThreadStart(stratwrite1));//創建第二個線程       tr1.Start();//啟動線程     }        } } 


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桂东县| 平武县| 余干县| 靖西县| 苗栗县| 泸西县| 鱼台县| 章丘市| 静宁县| 高淳县| 新乡县| 陕西省| 启东市| 黄石市| 黔南| 石阡县| 阜新市| 密山市| 安乡县| 鲜城| 梁山县| 余姚市| 汉阴县| 庆云县| 三江| 德江县| 枝江市| 抚顺县| 莲花县| 克什克腾旗| 色达县| 乐业县| 会东县| 新昌县| 德钦县| 天镇县| 昌黎县| 雅安市| 广德县| 隆尧县| 铜山县|