异步多线程(二)Thread
2020-12-03 08:42
标签:异步多线程 关闭进程 lin star mil 并且 介绍 传递 efault Theread 概念 C#对线程对象的一个封装(密封类)类库 Thread实例化及调用 第一种: 只是简单的把需要线程执行的方法传递到Thread Thread thread = new Thread(testMethod);//实例化Thread thread.Start();//开启线程,执行方法。 第二种 使用lambda表达式 Thread thread = new Thread(s => { Console.WriteLine("哈哈"); } ); thread.Start(); 第三种 在系统封装的Thread类中 我们可以看到Thread 需要接收一个ThreadStart类型的参数,而这个类型再往下看,其实就是一个无参不带返回值的委托 //ThreadStart是一个不带参数和返回值的委托 ThreadStart threadStart = () => { Console.WriteLine("测试"); }; Thread threadRunStart = new Thread(threadStart); threadRunStart.Start(); Thread常用方法介绍 等待 1判断Thread的ThreadState ThreadState的初始状态为Unstarted(未启动) while (thread.ThreadState != ThreadState.Stopped) { Thread.Sleep(200);//当前线程休息200ms } 2 Join等待 thread.Join();//运行这句代码的线程,等待thread的完成 thread.Join(1000);//最多等待1000ms 最高优先级 优先执行,但不代表优先完成 甚至说极端情况下, 还有意外发生,不能通过这个来控制线程的执行先后顺序 thread.Priority = ThreadPriority.Highest; 前后台线程 前台线程 thread.IsBackground = false;//默认是false 前台线程,进程关闭,线程需要计算完后才退出 后台线程 thread.IsBackground = true;//关闭进程,线程退出 为了便于更加清晰的理解及运用Thread,下面做了两个简单的封装示例 需求描述:回调:启动子线程执行动作A--不阻塞--A执行完后子线程会执行动作B 需求描述:1 异步,非阻塞的 2 还能获取到最终计算结果 异步多线程(二)Thread 标签:异步多线程 关闭进程 lin star mil 并且 介绍 传递 efault 原文地址:https://www.cnblogs.com/JohnTang/p/10987485.html #region 使用Thread 封装回调
{
ThreadStart threadStart = () => this.DoSomethingLong("button3_Click");
Action actionCallBack = () =>
{
Thread.Sleep(2000);
Console.WriteLine($"This is Calllback {Thread.CurrentThread.ManagedThreadId.ToString("00")}");
};
this.MethodThread(threadStart, actionCallBack);
}
#endregion
//回调:启动子线程执行动作A--不阻塞--A执行完后子线程会执行动作B
///
#region 使用Thread 封装有返回值异步调用
{
Funcint> func = () =>
{
Thread.Sleep(5000);
return DateTime.Now.Year;
};
Funcint> funcThread = this.ThreadWithReturn(func);//非阻塞
int iResult = funcThread.Invoke();//阻塞,真正需要拿到结果时。
}
#endregion
///
上一篇:异步与多线程