C#学习笔记之线程

来源:互联网 发布:笑郭天盾网络验证 编辑:程序博客网 时间:2024/05/21 06:00
<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>

0 0
原创粉丝点击