当前位置:编程学习 > C#/ASP.NET >>

请问如何在线程中控制form?

        private void button1_Click(object sender, EventArgs e)
        {
            Thread th = new Thread(new ThreadStart(YourThread));
            th.Start();
        }
        void YourThread()
        {
            textBox1.text = "test";
        }
这段代码中textBox1.text 不能控制text的值

请问有什么方法改变textBox1.text的值呢 --------------------编程问答-------------------- 线程间通信? --------------------编程问答-------------------- 使用Invoke

参考MSDN的Control.InvokeRequired属性
--------------------编程问答-------------------- delegate void SetTextCallback(string text);

//设置信息显示
        private void SetText(string text)
        {
            if (this.richTextBox1.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(SetText);
                this.Invoke(d, new object[] { text });
            }
            else
            {
                this.richTextBox1.AppendText(text);
                this.richTextBox1.ScrollToCaret();
            }
        } --------------------编程问答-------------------- 楼上正解

有两种办法解决:
一个是使用BackgroundWorker,这也是一个线程,只不过帮你封装好了,用起来简单。
楼主可以参考此文:
http://www.cnblogs.com/walkingmu/archive/2008/05/02/1179501.html

还有一个是像楼上那样做
可以参考此文:
http://www.cnblogs.com/imissherso/archive/2007/01/28/632480.html --------------------编程问答-------------------- 简单点: This.CheckForIllegalCrossThreadCalls = false;
要不就去用delegate  --------------------编程问答-------------------- 使用线程安全的委托

control.Invoke
--------------------编程问答--------------------
引用 5 楼 Ador3 的回复:
简单点: This.CheckForIllegalCrossThreadCalls = false; 
要不就去用delegate 
--------------------编程问答-------------------- 加上CheckForIllegalCrossThreadCalls = false;
否则会调试出异常,跨线程调用控件要用上这一句,但也不是安全的,用委托吧
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,