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)    可以使当前线程停止一段时间运行

  • 相关阅读:
    668. Kth Smallest Number in Multiplication Table
    658. Find K Closest Elements
    483. Smallest Good Base
    475. Heaters
    454. 4Sum II
    441. Arranging Coins
    436. Find Right Interval
    410. Split Array Largest Sum
    392. Is Subsequence
    378. Kth Smallest Element in a Sorted Matrix
  • 原文地址:https://www.cnblogs.com/Elijah/p/2266656.html
Copyright © 2011-2022 走看看