学习笔记——线程 Thread
Thread是.net1.0 1.1时出现的
主要了解线程等待、回调、前后台线程区别
1.实例:
//定义:public delegate void ThreadStart();
ThreadStart threadStart = new ThreadStart(() =>
{
Thread.Sleep(5000);
this.DoSomethingLong("btnThreads_Click");
});
Thread thread = new Thread(threadStart);
//thread.IsBackground = true;//变成后台线程
thread.Start();//默认是前台线程,UI线程退出后,还会继续执行完;后台线程就直接退出了
2.等待(如果线程执行完毕,dosomething())
while (thread.ThreadState != System.Threading.ThreadState.Running)
{
dosomething()
}
3.获取线程执行后的返回值
/// <summary>
/// 带返回值的
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="funcT"></param>
/// <returns></returns>
private Func<T> ThreadWithReturn<T>(Func<T> funcT)
{
T t = default(T);
ThreadStart startNew = new ThreadStart(
() =>
{
t = funcT.Invoke();
});
Thread thread = new Thread(startNew);
thread.Start();
return new Func<T>(() =>
{
thread.Join();//线程执行完才返回t.(主线程会等待子线程完成)
return t;
});
}
调用方法获取返回值
Func<int> func = this.ThreadWithReturn(() =>//begininvoke
{
Thread.Sleep(2000);
Console.WriteLine($"这里是ThreadStart {Thread.CurrentThread.ManagedThreadId.ToString("00")}");
return 12345;
});
Console.WriteLine("已经执行到这里了。。。");
int iResult = func.Invoke();//endinvoke
4.回调
/// <summary>
/// 基于Thread封装支持回调
/// BeginInvoke的回调
/// </summary>
/// <param name="threadStart"></param>
/// <param name="callback"></param>
private void ThreadWithCallback(ThreadStart threadStart, Action callback)
{
ThreadStart startNew = new ThreadStart(
() =>
{
threadStart();
callback.Invoke();
});
Thread thread = new Thread(startNew);
thread.Start();
}
//委托的异步调用 测试:ThreadWithCallback
this.ThreadWithCallback(() =>
{
Thread.Sleep(2000);
Console.WriteLine($"这里是ThreadStart {Thread.CurrentThread.ManagedThreadId.ToString("00")}");
}
, () =>
{
Thread.Sleep(2000);
Console.WriteLine($"这里是callback {Thread.CurrentThread.ManagedThreadId.ToString("00")}");
});
参考资料:http://www.cnblogs.com/lvcy/archive/2012/06/16/2551539.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构