前言
通常會有需求通過多線程調用帶參數的委托函數,有一個參數的,也有多個參數的,下面來講講實現的方式
執行帶一個參數的委托函數
#region 執行帶一個參數的多線程 Thread mythread = new Thread(new ParameterizedThreadStart(Calculate)); mythread.IsBackground = true; mythread.Start(500); #endregion private void Calculate(object Max) //帶一個參數的委托函數 { int max = (int)Max; Stopwatch stopwatch = Stopwatch.StartNew(); for (int i = 0; i < max; i++) { Thread.Sleep(5); } stopwatch.Stop(); long lSearchTime = stopwatch.ElapsedMilliseconds; MessageBox.Show(lSearchTime.ToString() + "毫秒"); }
執行帶多個參數的委托函數
方式一: 定義一個類,將要傳的參數設置為類的屬性,然后將參數值賦值給類的屬性,將類作為一個參數進行傳達,以下代碼通過兩個參數示例,多個參數一樣,代碼如下
class MyClass { public int Max { get; set; } public int Min { get; set; } } #region 第一種方式:執行帶多個參數的多線程 MyClass model = new MyClass(); model.Max = 500; model.Min = 0; Thread mythread1 = new Thread(new ParameterizedThreadStart(CalculateTwo)); mythread1.IsBackground = true; mythread1.Start(model); #endregion private void CalculateTwo(object Myclass) //帶多個參數的委托函數 { MyClass model = (MyClass)Myclass; Stopwatch stopwatch = Stopwatch.StartNew(); for (int i = model.Min; i < model.Max; i++) { Thread.Sleep(5); } stopwatch.Stop(); long lSearchTime = stopwatch.ElapsedMilliseconds; MessageBox.Show(lSearchTime.ToString() + "毫秒"); }
方式二:lambda表達式的方式,簡單方便,代碼如下:
#region 第二種方式:執行帶多個參數的多線程 Thread mythread2 = new Thread(() => CalculateThree(500, 0)); mythread2.IsBackground = true; //設置為後臺線程,程式關閉后進程也關閉,如果不設置true,則程式關閉,此線程還在內存,不會關閉 mythread2.Start(); #endregion private void CalculateThree(int Max,int Min) //帶多個參數的委托函數 { Stopwatch stopwatch = Stopwatch.StartNew(); for (int i = Min; i < Max; i++) { Thread.Sleep(5); } stopwatch.Stop(); long lSearchTime = stopwatch.ElapsedMilliseconds; MessageBox.Show(lSearchTime.ToString() + "毫秒"); }
結束語
以上就是執行帶參數的多線程的幾種方式,各位看官是否還有更好的方式??