码迷,mamicode.com
首页 > 编程语言 > 详细

.Net学习笔记----2015-07-03(线程/多线程)

时间:2015-07-04 00:42:29      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

单线程带来的问题

如果让一个程序做多个事,会出现“卡死”的状态

为什么用多线程:

1、让计算机“同时”做多件事情,节约时间

2、多线程可以让一个程序“同时”处理多个事情

3、后台运行程序,提高程序的运行效率,也不会使主界面出现无响应的情况

4、获得当前线程和当前进程

 

线程分为前台线程和后台线程

1、前台线程:只有所有的前台线程都关闭,才能完成程序关闭

2、后台线程:只要所有的前台线程结束,后台线程自动结束

 

产生一个线程的步骤

1、编写产生线程所要执行的方法

2、System.Threading命名空间

3、实例化Thread类,并传入一个指向线程所要运行的方法委托(此时线程已经产生,但还没有运行)

4、调用Thread实例的Start方法,标记该线程可以被CPU执行,具体执行时间由CPU决定

 

在.Net下,不允许跨线程的访问

线程在被Abort(关闭线程的方法)之后就无法再重新Start了

Thread.Sleep(毫秒),静态方法,可以使当前线程停止一段时间运行

Name线程名

Thread.CurrentThread获得当前的线程引用

 

        //创建一个线程去执行这个方法
        Thread th;
        private void button1_Click(object sender, EventArgs e)
        {
            //创建一个线程去执行这个方法
            th = new Thread(Test);
            //标记这个线程已经准备就绪了,可以随时被执行。具体什么时候执行这个线程,由CPU决定
            //将线程设置为后台线程
            th.IsBackground = true;
            th.Start();
            //Test();
        }
        private void Test()
        {
            for (int i = 0; i < 10000; i++)
            {
                //Console.WriteLine(i);
                textBox1.Text = i.ToString();//这个会导致跨线程操作,报异常
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //取消跨线程的访问
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            //当点击关闭主窗体的时候,判断新线程是否为null,如果不为null则手动关闭
            if (th != null)
            {
                //结束这个线程
                th.Abort();
                //线程在被Abort之后就无法再重新Start了
            }
        }
    }

 

.Net学习笔记----2015-07-03(线程/多线程)

标签:

原文地址:http://www.cnblogs.com/mikie/p/4619986.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!