A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 安玉波 中级黑马   /  2013-3-7 18:10  /  1961 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、多线程前台线程和后台线程        前台线程:只有所有的前台线程都关闭才能完成程序的关闭。
        后台线程:只要所有的前台线程结束,后台线程自动结束。
        Thread threadFrist =new Thread (方法名);
        threadFrist .IsBackGround=true;//将线程threadFrist 设置为后台线程 (当所有的前台线程结束,后台线程自动退出)
二、多线程线程重入的问题
        以下代码是定义了两个线程,这两个线程执行同一个方法ChangTxt(),如果只有一个线程执行ChangTxt方法,那么txtNum文本里面的值是10000,那么两个线程都执行同一个方法ChangTxt,是不是文本框里面的值就是20000呢?答案小于20000 ,因为在执行这两个线程时,并不是说第一个线程执行完这个方法后,第二个线程再执行,CPU在执行这两个线程是执行一会线程1在执行线程2,比如线程1在执行完代码:int num = int.Parse(txtNum.Text.ToString().Trim());后就去执行代码2:这时候线程1处于暂停状态,这样有事我再用多线程是会发现数据的丢失,这就是多线程线程重入的问题引起的。
        public Thread()
        {
            InitializeComponent();
            TextBox.CheckForIllegalCrossThreadCalls = false;//关闭当前窗体  对非法跨线程访问 文本框控件 的检查
        }
        /// <summary>
        /// 修改文本框里面的内容
        /// </summary>
        void ChangTxt()
        {
            for (int i = 0; i < 10000; i++)
            {
                int num = int.Parse(txtNum.Text.ToString().Trim());
                num++;
                txtNum.Text = num.ToString();
            }
        }

        private void btnThreadProblem_Click(object sender, EventArgs e)
        {
            //创建线程
            Thread threadFrist = new Thread(ChangTxt);
            threadFrist.IsBackground = true;//把线程设置为后台线程
            threadFrist.Start();//开启线程

            Thread threadFrist2 = new Thread(ChangTxt);
            threadFrist2.IsBackground = true;
            threadFrist2.Start();
        }


评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

2 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
lz写的不错,往努力,加油!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马