当前位置:首页 > C#学习 > 正文内容

C# 线程类 Thread

小道6年前 (2018-12-22)C#学习6225

使用System.Threading.Thread类可以创建和控制线程。

现在C#已经建议摈弃使用 Suspend, Resume 暂停/恢复线程, 也尽量少用 Abort方法中断一个线程.

建议使用线程的同步手段有:  Mutex、ManualResetEvent、AutoResetEvent, Monitor.

.Net中的线程,可以分为后台线程和前台线程。后台线程与前台线程并没有本质的区别,它们之间唯一的区别就是:后台线程不会防止应用程序的进程被终止掉。就是当前台线程都结束了的时候,整个程序也就结束了,即使还有后台线程正在运行,此时,所有剩余的后台线程都会被停止且不会完成.但是,只要还有一个前台线程没有结束,那么它将阻止程序结束.应用程序进程的存亡由前台线程决定而于后台线程无关.这就是它们的区别.改变线程从前台到后台不会以任何方式改变它在CPU协调程序中的优先级和状态。因为前台后线程与程序进程的优先级无关.下面的代码示例对比了前台线程与后台线程的行为。创建一个前台线程和一个后台线程。前台线程使进程保持运行,直到它完成它的 while 循环。前台线程完成后,进程在后台线程完成它的 while 循环之前终止。

C#中,Thread类有一个IsBackground 的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程。


使用线程显示当前时间代码:

using System;
using System.Threading;
using System.Windows.Forms;

namespace 多线程
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Thread t;//创建并控制线程,设置其优先级并获取其状态。
        private void button1_Click(object sender, EventArgs e)
        {
            t = new Thread(Time);//实例化 调用Time方法
            t.IsBackground = true;//设置后台线程
            t.Start();//线程已准备好,随时可以开始
        }
        void Time()//方法
        {
            while (true)//循环
            {
                textBox1.AppendText(DateTime.Now + "\r\n");//输出
                Thread.Sleep(1000);//挂起指定时间,毫秒
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Control.CheckForIllegalCrossThreadCalls = false;//获取或设置一个值,该值指示是否捕获对错误线程的调用
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (t != null)//判断线程是否为null  如果为null 说明当前没执行
            {
                t.Abort();//在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。调用此方法通常会终止线程。
            }
        }
    }
}

输出结果:

image.png

扫描二维码推送至手机访问。

版权声明:本文由小道发布,如需转载请注明出处。

本文链接:https://daobk.com/post/156.html

分享给朋友:

“C# 线程类 Thread” 的相关文章

while语句:用while计算1到100之间整数的和

while语句:用while计算1到100之间整数的和

while语句:用while计算1到100之间整数的和            int s = 0;//定义一个整型变量s 赋值为0 &nb...

while语句:编写聊天机器人,如果问“今天天气怎么样?”则回答天气 ,如果问……,如果说“88”,则“再见”。

while语句:编写聊天机器人,如果问“今天天气怎么样?”则回答天气 ,如果问……,如果说“88”,则“再见”。

while语句:编写聊天机器人,如果问“今天天气怎么样?”则回答天气 ,如果问……,如果说“88”,则“再见”。            Console.WriteLine(&quo...

字符串的处理练习

字符串的处理练习

接收用户输入的字符串,将其中的字符以与输入相反的顺序输出。            Console.WriteLine("请输入一个字符串");//提示用户输入一...

继承

继承

定义类的时候不指定父类,则父类是Object类。Object类是任何类的直接或者间接父类。    class Program     {      &nbs...