线程是一个可以独立执行的执行路径。 每一个线程都运行在一个操作系统进程中。这个进程提供了程序执行的独立环境。 在单线程程序中,进程中只有一个线程运行,因此线程可以独立使用进程环境。而在多线程程序中,一个进程中会运行多个线程。它们共享同一个执行环境(特别是内存)。这在一定程度上说明了多线程的作用。例如,可以使用一个线程在后台获得数据,同时使用另一个线程显示所获得的数据。而这些数据就是所谓的状态。
前台线程与后台线程
一般情况下,显式创建的线程称为前台线程。只要有一个前台线程还在运行,应用程序就仍然保持运行状态。而后台线程则不然。当所有前台线程结束时,应用程序就会停止,且所有运行的后台线程也会随之终止。
在C#中,可以使用
System.Threading
命名空间下的Thread
类来创建和控制线程。以下是一些常用的线程操作方法和示例代码:1.创建并启动线程:
Thread thread = new Thread(new ThreadStart(WorkMethod));
thread.Start();
void WorkMethod()
{
// 线程执行的代码
}2.使用参数创建线程:
int threadParameter = 10;
Thread threadWithParameter = new Thread(new ParameterizedThreadStart(WorkMethodWithParameter));
threadWithParameter.Start(threadParameter);
void WorkMethodWithParameter(object parameter)
{
int param = (int)parameter;
// 线程执行的代码,使用参数param
}3.线程睡眠(Sleep):
Thread.Sleep(1000); // 线程休眠1000毫秒
4.设置线程优先级:
thread.Priority = ThreadPriority.AboveNormal; // 设置线程优先级
5.线程中的异常处理:
thread.IsBackground = true; // 设置为后台线程,可以捕获未处理的异常
thread.SetApartmentState(ApartmentState.STA); // 设置单线程单元状态(根据需要)
thread.Start();6.线程同步:
lock (lockObject)
{
// 访问共享资源的代码
}7.使用线程池:
ThreadPool.QueueUserWorkItem(new WaitCallback(WorkMethod), threadParameter);
8.等待线程结束:
thread.Join(); // 阻塞调用线程直到thread完成执行
Thread thread01 = new Thread(XXX);
thread01.Name = "偶数";
thread01.Start();
ThreadPool.QueueUserWorkItem(XXX); //线程池
public void XXX(object obj)
{
}
Socket
Socket被称为“套接字”,抽象化为类,程序设计者只需要创建Socket类对象,即可使用套接字。简单的说就像一个插座,连接应用层与运输层,并不需要理解是如何实现的,相当于在TCP/IP协议基础上封装起来,客户端与服务端通过插座作为中介用网线连接起来。在使用时我们只需要知道IP地址与端口号。
//得有手机(使用ivp4查找地址,使用字节流传输数据,使用Tcp协议传输)
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//创建手机卡(默认IP地址,自定义端口号)
IPEndPoint ip=new IPEndPoint(IPAddress.Any, 1025);
//绑定手机号
socket.Bind(ip);
//设定接听上线
socket.Listen(10);
//等待别人打电话
Socket client=socket.Accept();
//来电显示
IPEndPoint clientIP = client.RemoteEndPoint as IPEndPoint;
Console.WriteLine(clientIP.Address+":"+clientIP.Port+"链接");
点赞+关注 了解更多内容 下一章Socket...