C#多線程及GDI(Day 23)
理論:
在學習多線程之前,首先要了解一下什麼是進程?
進程:(關鍵字Process)進程是一個具有一定獨立功能的程序關於某個數據集合的一次運行活動。它是操作系統動態執行的基本單元,在傳統的操作系統中,進程既是基本的分配單元,
也是基本的執行單元。簡單來說,就是計算機開啟的一個正在運行的軟件,是一段程序的執行過程。操作系統上包含N個進程。一個進程包含多個線程.
線程:(關鍵字Thread)線程是程序中一個單一的順序控制流程,在一個進程裡面開辟多個功能來同時執行多個任務。每一個程序都至少有一個線程,若程序只有一個線程,那就是程序本身。
前台線程:UI界面使用的是系統給我們默認的前台線程 前台線程終止後,後台線程不會終止。
後台線程:指的是我們自定義的線程對象 後台線程終止後,前台線程將會結束。
多線程: 在單個程序中同時運行多個線程完成不同的工作成為多線程。
GDI: 圖形設備接口(GDI:Graphics Device Interface)是Windows的子系統,它負責在視訊顯示器和打印機上顯示圖形。
實操:
進程(在控制台下)
<strong><span style="font-size: 18pt;">class Program
{
static void Main(string[] args)
{
Process[] proce = Process.GetProcesses(); //獲取操作系統上的所有進程
foreach (var item in proce)
{
item.Kill(); //停止關聯的進程(慎用)
Console.WriteLine(item);
}
Process.Start("devenv"); //打開一個進程
Process p1 = new Process(); //實例化一個進程
ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\system32\calc.exe"); //打開計算器進程的路徑
p1.StartInfo = info;
p1.Start(); //打開
}
}
}
</span></strong>
線程:在Form窗體下
設計界面
主要代碼:
<strong><span style="font-size: 18pt;">public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool b = false;
Thread th = null; //引入命名空間
private void button1_Click(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false; //是否跨線程
if (!b)
{
this.button1.Text = "終止";
b = true;
th = new Thread(Bgian);
th.Start(); //開始
}
else
{
this.button1.Text = "抽獎";
b = false;
th.Abort(); //終止線程
}
}
public void Bgian()
{ //讓三個label控件循環獲取1--10的隨機數
Random r = new Random();
while (true)
{
label1.Text = r.Next(1,10). ToString();
label2.Text = r.Next(1, 10).ToString();
label3.Text = r.Next(1, 10).ToString();
}
}
}
</span></strong>
運行結果
單擊”抽獎“按鈕後出現的界面
單擊”終止“按鈕出現的界面:
GDI畫圖(直線)
<strong><span style="font-size: 18pt;">public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics(); //引進命名空間using System.Drawing;
Pen p = new Pen(Brushes.Red); //Pen定義用於繪制直線和曲線的對象 Brushes所有標准顏色的畫筆
g.DrawLine(p,new Point(100,100),new Point (300,100)); //只能畫一條線
Point[] points = { new Point(150, 200), new Point(250, 200), new Point(100, 300), new Point(300, 300) };//定義個Point數組來畫多條線
g.DrawLines(p, points);
}
</span></strong>
簡單提一下序列化:序列化就是將類以二進制的形式保存在硬盤上。關鍵字是:BinaryFormater。定義一個序列化是: BinaryFormatter binary = new BinaryFormatter();