1. 程式人生 > >帶參數的多線程如何去寫?

帶參數的多線程如何去寫?

ring bsp 參數 進行 parameter ssa private string threads

帶參數的多線程的方式

#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() + "毫秒");
}

帶參數的多線程如何去寫?