接触C#和VS也差不多五个月了,其实也还是个小白,关于线程的用法其实在网上找又一大堆,无形参无返回,无形参有返回,有形参无返回,有形参有返回的四种情况,简单的总结一下我使用过的方法吧~
1.无形参无返回
Thread thread = new Thread(doWork);
thread.start();
2.无形参有返回
(这里的栗子是,doThread返回一个bool值)
public delegate bool MyDelegate();//根据doThread的返回类型声明一个委托
private void delegateThread()
{
MyDelegate dele = new MyDelegate(doWork);//委托,但是还是还会在主线程上处理
bool result = dele.Invoke(); //收集返回值
}
private void doThread()
{
Control.CheckForIllegalCrossThreadCalls = false;//防止获取界面控件是抛出的异常
Thread thread = new Thread(new ThreadStart(delegateThread));
thread.Priority = ThreadPriority.Highest;//优先级
thread.IsBackground = true;//与程序共存亡
thread.Start();
}
3.有形参无返回
Control.CheckForIllegalCrossThreadCalls = false;
ThreadStart starter = delegate { doWork(parameter); };//parameter就是填入的参数
Thread thread= new Thread(new ThreadStart(starter));
thread.IsBackground = true;
thread.Start();
4.有形参有返回
(这里的栗子是,doThread一个int型的形参是,返回一个int值)
其实跟2.无形参有返回 差不多,都是用一个委托函数包起来。还有可以用一个类,把你的方法和成员变量包起来用也是一样可以的。我这里就说一种方法吧。
public delegate int MyDelegate(int a);
static void Main(string[] args)
{
Thread thread;
thread = new Thread(new ThreadStart(delegateThread));
thread.Start();
thread.IsBackground = true;
Console.ReadLine();
}
private static void delegateThread()
{
MyDelegate dele = new MyDelegate(doWork);
int result = dele.Invoke(3); //收集返回值
Console.WriteLine("result:" + result);
}
private static int doWork(int num)
{
Console.WriteLine("doWork!\n");
return num * num;
}
其实每种情况都有多种实现的方法,这里就只介绍下我用过的,可能有些欠缺的地方,欢迎指点~