1. 程式人生 > >c# 非同步呼叫 Thread

c# 非同步呼叫 Thread

非同步呼叫中的方法還有就是直接操控執行緒,可以使用自己建立的執行緒,也可以使用執行緒池,執行緒池的好處就是可以複用,節省執行緒建立銷燬的時間,另外還有排隊 控制數量等的方便,下面就簡答介紹一下用法。

對了執行緒方法一般使用的是無引數或者一個引數的方法,具體的例子也是轉載別的人,看著也很通俗易懂

 

轉載內容:

首先是無引數的

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; 
}

轉載自:

https://www.cnblogs.com/wyy1234/p/9166444.html