日期:2014-05-18  浏览次数:20767 次

C# WinForm 线程问题!!!
在主线程里有对 button1.Enable = true;
在另一个线程里要对button1.Enable = false;时抛出异常![线程间的操作无效!]
怎么才能解决?
用委托?还是有别的方法? 怎么用?

------解决方案--------------------
呵呵。用Invoke.
------解决方案--------------------
在线程中加一句
CheckForIllegalCrossThreadCalls = false;

试试.

------解决方案--------------------
C# code
delegate void ThEvent(string text);
        Thread th;
        private void button1_Click(object sender, EventArgs e)
        {
            th = new Thread(new ThreadStart(Run));
            th.IsBackground = true;
            th.Start();
        }

        private void Run()
        {
            if (button1.InvokeRequired)
            {
                string strText = "bbbbbbbbbb";
                ThEvent thEvent = new ThEvent(SetText);
                this.Invoke(thEvent, new object[] { strText });
            }
            else
            {
                button1.Text = "bbbbbbbbbb";
            }
        }

        private void SetText(string text)
        {
            button1.Text = text;
        }

------解决方案--------------------
1:解决方案1,在线程的设置代码前执行如下操作:
Form.CheckForIllegalCrossThreadCalls = false;
你将可以无错的执行这段代码,但由于没有了线程检测机制,你的代码可能会有奇怪的问题;

2:解决方案2,使用Invokde或者BeginInvoke的方式调用。稍后给出代码。

------解决方案--------------------
楼上已经给出代码,我就不写了。