当前位置: 程晨旭的博客 > 学习笔记>正文

Winform异步更新UI界面的方法二:CheckForIllegalCrossThreadCalls=false 放弃线程安全

在窗体中设置以下属性,可以使窗体放弃线程安全检查,那么结果就是任意线程任意时间均可自由互相访问,例如所有线程都可以直接访问UI控件.

这个方法任何时候均不推荐使用.使用不安全的线程容易让程序发生奇怪并难以调试的BUG.

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 chengchenxu.com.CheckForIllegalCrossThreadCalls
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false; //取消线程安全检查 使UI访问不受限制
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //启用线程 进行累加
            Thread thread = new Thread(Add);
            //设为后台线层 否则关闭窗体线程不会停止 直到执行完毕 这里为了便于调试 
            thread.IsBackground = true;
            thread.Start();           
        }
        private void Add()
        {
            for (int i = 0; i < 1000; i++)
            {
                //可以随意访问UI控件
                this.label2.Text = i.ToString();
                Thread.Sleep(50);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //开启新线程,访问Label2
            Thread thread2 = new Thread(GetLabelText);
            thread2.Start();
        }
        private void GetLabelText()
        {
            //取得Label2的值
            MessageBox.Show("取得值"+this.label2.Text);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //主线程直接访问Label2
            MessageBox.Show("取得值" + this.label2.Text);
        }

        
    }
}


DEMO:chengchenxu.com.CheckForIllegalCrossThreadCalls.rar


本文为博主原创,转载请保留出处:
http://www.chengchenxu.com/Article/29/CheckForIllegalCrossThreadCalls

‹‹ 上一篇 下一篇 ››

评论列表:

发表评论:

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