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

C# 线程类 Thread

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

使用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” 的相关文章

输入一个圆的半径,输出圆的面积。

输入一个圆的半径,输出圆的面积。

输入一个圆的半径,输出圆的面积。            Console.WriteLine("请输入圆的半径:");//提示 用户 输入一个...

while语句:用 while continue实现计算1到100之间的除了能被7整除之外所有整数的和。

while语句:用 while continue实现计算1到100之间的除了能被7整除之外所有整数的和。

while语句:用 while continue实现计算1到100之间的除了能被7整除之外所有整数的和。            int i = 1;/...

类型转换Cast和Convert

类型转换Cast和Convert

把源类型赋值给目标类型,两个类型不一致的时候会发生类型转换。a=b,b是源,a是目标。隐式转换、显式转换。当目标类型一定能满足源类型转换过去后的要求的话就是隐式转换;如果当目标类型不一定能满足源类型转换过去后的要求的话就需要显式转换(程序员自己负责)。比如:把中国人转换为人是隐式转换,把人转换为中国...

枚举enum

枚举enum

确定数量、确定值的几个取值:东西南北、男女、上中下。和用字符串比起来,用枚举的好处就是限定了变量的取值范围,程序处理起来更方便。namespace 枚举//命名空间 {     enum xb { 男, 女...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。