日期:2014-05-16  浏览次数:20946 次

跨线程调用控件的问题。。。
额。。新手一个。。
为什么add里面调用button1.Text会报错说不能跨线程调用控件,而调用button1.BackColor却没问题。。。。
求解。。。
 private void button1_Click(object sender, EventArgs e)
        {
            Thread asd = new Thread(new ThreadStart(add));
            asd.Start();
        }
        private void add()
        {
            button1.Text = "asd";
           // button1.BackColor = Color.FromArgb(0, 255, 255);
        }

------解决方案--------------------
引用:
引用:不知道是不是跟这个有关系:此类型的任何公共 static 成员都是线程安全的。但不保证所有实例成员都是线程安全的。 
这个是针对ButtonBase类的
button1.Text和button1.BackColor应该是一样的吧。。。。可是却一个报错一个不报错。。。。

我也不知道了,试了好几个,发现都没有跨线程错误

            button1.Text = "asd";//只有这个出现跨线程错误,以下的均不报错
            button1.BackColor = Color.FromArgb(0, 255, 255);
            button1.ForeColor = SystemColors.HighlightText ;
            button1.UseVisualStyleBackColor = true;
            this.button1.TabIndex = 1;


我也很想知道为什么,坐等高人解答
------解决方案--------------------
线程里面用就可以
MainForm.Fs( FormBorderStyle.FixedSingle);
------解决方案--------------------
可能是还没到触发错误的时候
曾经一大牛和我说过
线程里面操作UI
会引起一些你想不到的问题
当时因为编译通过了
我没把他的话听进去
然后后来就不稳定了。。。
------解决方案--------------------
引用:
引用:引用:引用:不知道是不是跟这个有关系:此类型的任何公共 static 成员都是线程安全的。但不保证所有实例成员都是线程安全的。 
这个是针对ButtonBase类的
button1.Text和button1.BackColor应该是一样的吧。。。。可是却……

这个解释有没有官方的   你说的值类型不会引起死锁  但是值类型Color作为字段存放在引用类型Control里   也是按引用存放的