这些日子很忙,太多的任务。今天把c#tcp/ip完善了一下,两种方式进行TCP/IP通信,一种是多线程,一种是多任务。之前看了c#之网络编程这本书,启发很大,但是里面的demo有很多很多的问题,以后我会一一讲述。再完善书上TCP/IP的历程中的逻辑不合理和bug的前提下,加入了心跳包发送机制,这一点c#有一个坑,回来慢慢给大家讲。
工欲善其事必先利其器,首先我们将一下C#的线程基础。
线程Thread
主线程和辅助线程
无论是控制台应用程序、WinForm、WPF程序,系统都会为进程创建一个默认的线程,这个线程为主线程。除了主线程外其他线程都是辅助线程。
C#界面编程UI线程是主线程,拥有大量计算操作和耗时操作都不能放在主线程中,否则会造成阻塞,这一点不仅仅是C#,java、android都是一样的。
前台线程和后台线程
一个线程要么是前台线程,要么是后台线程。两者的区别是:后台线程不会影响进程的终止,而前台线程会影响进程的终止。
用Thread对象创建的线程默认是前台线程,在托管线程池中执行的线程默认为后台线程。从非托管代码进入托管执行环境的所有线程也都被自动标记为后台线程。
IsBackground属性:获取或设置一个值,该值指示某个线程是否在后台执行。如果在后台执行为true,否则为false
IsThreadPoolThread属性:获取一个值,该值指示线程是否在托管线程池中执行。如果此线程在托管线程池中执行则为true,否则为false。