Home [C# 筆記] Process & Thread review
Post
Cancel

[C# 筆記] Process & Thread review

Process 進程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System.Diagnostics;
//取得當前程序正在運行的進程
Process.GetProcesses();

//通過進程去打開指定的應用程式
Process.Start("calc");
Process.Start("iexplore", "https://goole.com");

//通過進程打開你指定的文件
ProcessStartInfo psi = new ProcessStartInfo();
Process p = new Process();
p.StartInfo.FileName = @"C:\Users\rivalin\Desktop\lala.wav";
p.StartInfo.UseShellExecute = true;
p.Start();

進程和線程的關係?(Process & Thread)

  • 一個進程包含多個線程
    (一個Process包含多個Thread)
  • 單線程容易造成假死現象

前台線程 & 後台線程

我們應該使用後台線程

Thread.Start()

Start() 是告訴CPU這個線程已經準備好了,可以隨時可以被執行,但具體時間、執行時間,由CPU決定。

Thread.Abort()

Abort() 終止線程,終止完成之後不能再Start()

Thread.Sleep()

可以讓進程停止一段時間再運行

單線程的程序

不管是控制台、WinForm哪一個應用程式,當我們運行這個程序的時候,咱們的系統就會分配給我們一個主線程來運行這個程序,是一個單線程的程序

線程中如何訪問控件

.net 中默認不允許跨線程的,
所以用新線程去訪問主線程創建的框架,就會拋異常。
那怎麼樣才能不拋異常?
在程式加載的時候,取消它「不允許跨線程」的檢查

線程執行帶參數的方法

如果線程執行的方法需要參數,那麼要求這個參數必須是object類型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//如果線程執行的方法需要參數,那麼要求這個參數必須是object類型
void button_Click()
{
    Thread t = new Thread(Test);
    t.IsBackground = true;
    t.Start("123"); //從這裡給值,帶值進去
    //Test();

}
//如果線程執行的方法需要參數,那麼要求這個參數必須是object類型
void Test(object s) //object類型。 不能這樣寫=>Test(string s)
{
    //雖然是object類型,但可以強制轉型
    string ss = (string)s;
    for (int i = 0; i < 10000; i++) {
        Console.WriteLine(i);
    }
}
This post is licensed under CC BY 4.0 by the author.