C#多线程

一、创建线程

语法:

Thread thread = new Thread(方法名);
//第一步:创建一个线程
Thread thread = new Thread(Safe);
// = true后台线程 = false前台线程,后台线程执行完会主动关闭
//前后台线程区别:前台线程不会死亡,除非绑定它的方法执行完成
//后台线程机制:当项目中所有前台线程死亡后,后台线程会突然销毁
thread.IsBackground = false;
thread.Start();

线程池创建,推荐

//线程池创建线程
ThreadPool.QueueUserWorkItem(Out);

 

二、线程阻塞

//直到该线程完成后或经过了指定的时间为止执行
thread.Join(100);
//线程睡眠指定时间,单位毫秒
Thread.Sleep(1000);

 

三、线程安全

object y2 = new object();
//锁的机制:线程会排队,当先进入线程执行完成,再执行其他线程。
lock (obj)
{
    code...
}

 

四、线程通信 signal

ManualResetEvent 和 AutoResetEvent

//一个或多个正在等待发生的线程事件
private ManualResetEvent manualResetEvent = new ManualResetEvent(true);
//正在等待发生的线程事件
private AutoResetEvent autoResetEvent = new AutoResetEvent(true);

常用通信方法

//1.重置,将事件设置为非终止,导致线程阻塞。常用于初始化阻塞线程和暂停线程。
manualResetEvent.Reset();
//2.阻塞当前线程,直到接受到信号继续执行。常用于方法中等待信号
manualResetEvent.WaitOne();
//3.发送信号,将事件设置为有信号,允许一个或多个线程继续执行
manualResetEvent.Set();

 

五、处理当前任务的同时也兼顾其他任务

Application.DoEvents();  

  Application.DoEvents() 是一个在某些编程环境中使用的函数,它通常出现在如Visual Basic for Applications (VBA) 或其他基于消息循环的应用程序中。这个函数的作用是暂时放弃当前的执行流程,并允许其他事件(如用户点击或键盘输入)得到处理。

  这可以防止在执行长时间运行的操作时,应用程序变得无响应。 在VBA中,比如你在Excel VBA宏中进行大量数据处理时,使用 Application.DoEvents 可以让Excel有机会刷新屏幕并处理任何等待的用户输入事件。这样可以提高用户体验,因为用户仍然可以与应用程序交互,即使有后台任务正在进行。

  然而,需要注意的是过度使用 Application.DoEvents 可能会导致性能问题,因为每次调用都会打断程序执行流,所以应当谨慎使用

 

六、关闭退出当前程序

Environment.Exit(0); // 正常退出

 

posted @ 2024-07-26 17:39  别动我的猫  阅读(47)  评论(0编辑  收藏  举报