c# 非同步呼叫 Thread
阿新 • • 發佈:2019-01-06
非同步呼叫中的方法還有就是直接操控執行緒,可以使用自己建立的執行緒,也可以使用執行緒池,執行緒池的好處就是可以複用,節省執行緒建立銷燬的時間,另外還有排隊 控制數量等的方便,下面就簡答介紹一下用法。
對了執行緒方法一般使用的是無引數或者一個引數的方法,具體的例子也是轉載別的人,看著也很通俗易懂
轉載內容:
首先是無引數的
class Program { static void Main(string[] args) { //例項化類 起始我們也可以呼叫同一個類中的函式 這位師傅就是這麼演示一下 ThreadTest test = new ThreadTest(); //建立thread類 建構函式的引數為我們的目標函式 Thread thread1 = new Thread(test.Func2); //開始執行非同步任務 thread1.Start(); Console.ReadKey(); } } class ThreadTest { public void Func2() { Console.WriteLine("這是例項方法"); } }
有引數的
class Program { static void Main(string[] args) { ThreadTest test = new ThreadTest(); //有參呼叫例項方法,ParameterizedThreadStart是一個委託,input為object,返回值為void //也就是說明該方式的非同步只能接受一個輸入 並且不能有返回值 //多引數輸入的解決辦法是將引數建立為一個結構體 傳入結構體就好了 ParameterizedThreadStart ps= new ParameterizedThreadStart(test.Func1) //開始非同步任務 Thread thread1 = new Thread(ps); thread1.Start("有參的例項方法"); //附帶上我們的引數 Console.ReadKey(); } } class ThreadTest { public void Func1(object o) { Console.WriteLine(o); } }
private void sum(int a,int b,int c) //比如我們本來需要三個引數 struct sumarg { public int a; public int b; public int c; } //我們可以通過建立結構體 賦值 然後傳入非同步執行緒 sumarg sg = new sumarg(); sg.a = 10; sg.b = 3; sg.c = 3; //只需要傳入sg就好了 private void sum(obj args) { sumarg sg = (sumarg)args; int res =sg.a + sg.b + sg.c; }
轉載自: