winform 多线程错误集锦
1.Thread.sleep(300) 到底睡的是谁,哪个线程?
1 public void SetLabelInfo(object num) 2 { 3 ShowThreadInfo(); 4 if (textBox1.InvokeRequired) 5 { 6 Invoke(new Action<object>(SetLabelInfo), new object[] { num }); 7 } 8 else 9 { 10 int sum = 0; 11 int index = 0; 12 int max = (Int32)num; 13 while (index <= max) 14 { 15 sum = sum + index; 16 index++; 17 label1.Text = sum.ToString(); 18 Thread.Sleep(200); 19 } 20 } 21 }
累加显示到Label 中,第一次确实是Btn发起的线程,name:Start_Click线程,第二次显示的主线程,所以Thread.Sleep 睡的是主线程。
中间转一道,让复杂的累加运算在线程中跑,然后得到的结果让Label展示就行了,主线程只负责展示
1 public void LoadTheadMethod() 2 { 3 int sum = 0; 4 int index = 0; 5 int max = Convert.ToInt32(textBox1.Text); 6 while (index <= max) 7 { 8 index++; 9 sum = sum + index; 10 SetLabelInfo(sum); 11 Thread.Sleep(200); 12 } 13 }
在窗体构造函数中设置主线程的name
1 public Form2() 2 { 3 InitializeComponent(); 4 Thread threadMain = Thread.CurrentThread; 5 threadMain.Name = "主线程"; 6 }
在窗体中如何取消线程的操作?
Thread.Abort() 方法,不不不,这是李云龙的风格,但凡改过3年Bug,也不至于下这个狠手。Abort 是先抛错误,系统捕获之后才终止线程。
用标识符Flag来判断
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结