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来判断

posted @   蘇州澄湖  阅读(96)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示