C#学习笔记之线程

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace 线程基础知识
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 前台线程:默认创建的线程都是前台线程。主线程结束之后,前台线程还会继续执行,
        ///          当前台线程执行结束之后,整个程序才会结束。
        /// 后台线程:当主线程结束时,后台线程会立刻结束,整个程序也会结束。
        /// </summary>
        
        Thread th;
        private void button1_Click(object sender, EventArgs e)
        {
            // 如果是单线程程序,用主线程来调用函数,那么如果函数执行的时间比较长,则程序会
            // 出现“未响应”的情况,所以需要新开一个线程。
            
            // 创建一个线程来执行函数 Test();
            th = new Thread(Test);
            
            // 将线程设置为后台线程,主线程关闭之后后台线程也会立刻关闭,程序立刻结束。
            th.IsBackground = true;

            // 告诉CPU,线程准备就绪,随时可以调用,具体什么时间执行,由CPU决定。
            th.Start(); 
        }

        public void Test()
        {
            for (int i = 0; i < 10000; i++)
            {
                //Console.WriteLine(i.ToString());

                // 默认情况下:线程间操作无效,不可以跨线程操作。
                textBox1.Text = i.ToString();
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // 取消跨线程操作的限制。
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        // 取消跨线程操作的限制之后,当主线程关闭时,TextBox的对象就被释放了,而有时会由于某种不
        // 确定原因导致后台线程并没有立刻结束,那么线程还是会继续操作主线程的TextBox对象,这样就
        // 会发生错误。
        // 解决办法是:当窗口被关闭时(也就是主线程结束时),判断后台线程是否已经关闭,如果没有关闭,
        // 则手动关闭。
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            // 当关闭窗口时判断后台线程是否已经结束
            if (th != null)
            {
                // 如果线程没有结束,则手动结束它
                th.Abort();
            }
        }
    }
}

</span>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值