zoukankan      html  css  js  c++  java
  • [传智播客学习日记]多线程Thread类的基本应用

    有这样一个需求,一个小程序,上面有一个文本框和一个按钮,要求按下按钮时文本框里的内容从0循环变化到10000。
    乍一看这不就是一个循环修改字符串嘛!可是写出来一运行,就会发现点按钮的时候程序卡死!
    因为在同一个进程当中,代码是顺序执行的,我们同样可以让程序在初始化加载的时候就循环更新数字,结果就是循环还没执行完的时候窗口不显示,还是一种卡死的效果。
    一种有效的办法就是给这个循环单开辟一个线程。

    在按钮click事件里,开启一个新线程,Test是一个方法,这里传进的是个委托。

    1 Thread th = new Thread(Test);

    然后给这个线程定义为后台线程,让主窗体关闭时这个也关闭。

    1 th.IsBackground = true;

    告诉CPU可以开启这个线程。

    1 th.Start();

    Test方法就简单了,不用解释:

    1 void Test()
    2 {
    3 int number = int.Parse(textBox1.Text);
    4 while (number < 10000)
    5 {
    6 number++;
    7 textBox1.Text = number.ToString();
    8 }
    9 }


    最后在窗体构造函数里加上这么一句:

    1 CheckForIllegalCrossThreadCalls = false;

    由于计数线程使用了窗体上的东西,是跨线程操作,所以不检查跨线程调用的合法性。
    这样一来就避免了UI卡死的问题。

    线程类的常用成员:

    Start()            启动线程
    Abort()            终止线程
    Name            线程名
    CurrentThread        获得当前的线程引用
    Thread.Sleep(1000)    可以使当前线程停止一段时间运行

  • 相关阅读:
    六、Linux计划任务及压缩归档
    四、用户管理
    三、vim编辑器详解
    八、RAID磁盘阵列及CentOS7系统启动流程
    五、权限管理
    二、Linux常用命令
    七、Linux磁盘管理及LVM讲解
    一、Linux常用命令
    JS继承的实现方式 原型 原型链 prototype和_proto_的区别
    js引用类型(Object、Array)
  • 原文地址:https://www.cnblogs.com/Elijah/p/2266656.html
Copyright © 2011-2022 走看看