多线程总结

一,为什么要用多线程?

一个进程至少有一个线程,使用多线程可以让一个进程同时处理多件事情。

多线程可用在以下场合:

1.      网络socket通信;

2.      执行占用大量时间的操作;

3.      用户界面响应用户操作,由后台来执行任务等。

二,无参多线程的使用

Thread thread = new Thread(new ThreadStart(SayHello));

     thread.Start();

1.      new一个线程时需要传委托ThreadStart,此委托无返回值无参数;

2.      Start()方法是告诉操作系统此线程已准备就绪,而并非真的开始执行,具体什么时候执行是靠操作系统来分配的。

三,有参多线程的使用

Thread thread = new Thread(new ParameterizedThreadStart(SayHi));

     thread.Start("Tom");

1.      new一个线程时需要传委托ParameterizedThreadStart,无返回值,参数类型为object

2.      要传递的参数用Start()方法传进去。

四,怎么样传递多个参数?

由于ParameterizedThreadStart委托传递参数类型为object,所以可以通过传递数组或泛型集合等来传递多个参数,如:

List<string>list = new List<string>();

     list.Add("Tom");

     list.Add("Jony");

     list.Add("HanMeiMei");

    Thread thread = newThread(new ParameterizedThreadStart(SayHi));

     thread.Start(list);

五,线程的常用属性与方法

1.      当前线程:

Thread.CurrentThread

2.       线程ID,线程的唯一标识:

thread.ManagedThreadId

 

3.      线程休眠,静态方法,单位为ms

Thread.Sleep(3000);

4.       终止线程:

thread.Abort();

5.      线程优先级,值为一枚举值,此属性作用是建议操作系统设置成此优先级。

thread.Priority = ThreadPriority.Highest;

六,前台线程与后台线程

1.      设置方法:

thread.IsBackground= true;

设置为true是后台线程,为false为前台线程;

2.      前台线程与后台线程的区别:

前台线程:只有当所有的前台线程都关闭,程序才关闭。

后台线程:若所有前台线程都关闭,则后台线程也会自动关闭。

七,线程同步,解决多方法重入问题

1.      Lock锁来实现线程同步:

Person per = new Person();

            lock(per)

            {

                //要执行代码

                foreach(String str in(List<string>)list)

                {

                    Console.WriteLine(str+ ",how are you?");

                }

                Thread.Sleep(3000);

                Console.WriteLine("线?¨¬IDêo{0}"Thread.CurrentThread.ManagedThreadId);

            }

将要执行的代码锁住,则解决多方法重入时共享资源的协调的问题。

八,解决Winform中无法在一个线程中控制另一个线程创建的控件的问题

1.      关闭C#的检查功能:

Contorl.CheckForIllegalCrossThreadCalls=false;

2.      使用Invoke()方法。

原文地址:https://www.cnblogs.com/jietian331/p/3005768.html