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

线程间操作无效: 从不是创建控件的线程访问它

时间:2014-09-18 14:35:03      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:style   os   使用   ar   for   art   sp   代码   on   

public partial class Form1 : Form
    {
        private delegate void DelegateSetText(string text);
        private void SetText(string text)
        {
            if (this.txtMessage.InvokeRequired)
            {
                Invoke(new DelegateSetText(SetText), text);
            }
            else
            {
                this.txtMessage.Text += text;
            }
 
        }
 
        public Form1()
        {
            InitializeComponent();
            //Control.CheckForIllegalCrossThreadCalls = false;
        }
 
        private void btnTest_Click(object sender, EventArgs e)
        {
            var t = Task.Factory.StartNew(() =>
            {
                Do();
            });
 
        }
     private void Do()
        {
            btnTest.Invoke(new MethodInvoker(delegate() { btnTest.Enabled = false; }));
            txtMessage.Invoke(new MethodInvoker(delegate() { txtMessage.Text = ""; }));
 
            //this.Invoke(new MethodInvoker(() => { btnTest.Enabled = false; }));
            //this.Invoke(new MethodInvoker(() => { txtMessage.Text = ""; }));
            int i = 0;
            while (i < 10)
            {
                string str = DateTime.Now + ":" + i + "\r\n";
                // 简单代码直接写代理
                txtMessage.Invoke(new MethodInvoker(delegate() { this.txtMessage.Text += str; }));
                /////或者使用如下方法,显示声明代理
                //SetText(str);
                Thread.Sleep(1000);
                i++;
            }
 
            btnTest.Invoke(new MethodInvoker(delegate() { btnTest.Enabled = true; }));
            //this.Invoke(new MethodInvoker(() => { btnTest.Enabled = true; }));
 
            /*
             this.Invoke(new MethodInvoker(() =>
            {
                btnTest.Enabled = false;
                txtMessage.Text = "";
 
                int i = 0;
                while (i < 10)
                {
                    string str = DateTime.Now + ":" + i + "\r\n";
                    // 简单代码直接写代理
                    txtMessage.Invoke(new MethodInvoker(delegate() { this.txtMessage.Text += str; }));
                    /////或者使用如下方法,显示声明代理
                    //SetText(str);
                    Thread.Sleep(1000);
                    i++;
                }
                btnTest.Enabled = true;
            }));
            */
 
        }    
 }

线程间操作无效: 从不是创建控件的线程访问它

标签:style   os   使用   ar   for   art   sp   代码   on   

原文地址:http://www.cnblogs.com/Rannie/p/3979043.html

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