c#多线程操作Windows Forms控件

c#多线程操作Windows Forms控件

 

在Windows Forms编程中涉及到的多线程操作,多个线程来更新Forms上的控件,比如textbox等。但是如果你直接在线程中更新textbox的text属性是会报错的。因为textbox是主线程创建的,子线程访问的时候就会报错。

 

解决方案如下,建立一个Windows Forms项目,拖拉一个textbox和button就可以。

点击button来启动线程,在线程中修改textbox的值。

这需要使用委托类

//启动线程

private void button1_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(new ThreadStart(Test));
            thread.Start();
        }

delegate void add();//委托

public void Test()
        {
            this.BeginInvoke(new add(dd));
        }

public void dd();//委托方法
        {
            this.textBox1.Text = "AA";
        }

这样就可以实现。

 

当然委托和委托方法可以再设计一下,可以输入一个参数。修改后的代码如下:

delegate void add(string input);

        private void button1_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(new ThreadStart(Test));
            thread.Start();
        }
        public void Test()
        {
            this.BeginInvoke(new add(dd),new object[]{"我晕死了,原来这样啊"});//注意第二个参数,委托方法的参数就是在这个地方输入。委托方法中不用转换就直接是字符串了
        }

        public void dd(string input)
        {
            this.textBox1.Text = input;
        }

 

再附加一个写listbox的例子。就是开启一个线程以后在listbox中写入累加的数字

//声明线程对象

 System.Threading.Thread thread1 = null;

//创建线程并开启

thread1 = new Thread(startThread1);
            thread1.IsBackground = true;
            thread1.Start();

//创建委托对象

delegate void AddList(object o);
//委托用的方法
        public void AddListMethod(object o)
        {
            this.listBox1.Items.Add(o.ToString());
        }
//线程调用的方法
        public void startThread1()
        {
            for (int n = 0; n < 10000; n++)
            {

                this.textBox1.BeginInvoke(new AddList(AddListMethod),new object[]{n});
                System.Threading.Thread.Sleep(100);//这个地方只是为了防止线程运行太快,数字会慢慢在listbox上显示
            }
        }

-----------------------------------------

或者采用 更简单的方式

 

Control.CheckForIllegalCrossThreadCalls = false;

control可以使windowFrom控件,任何控件

转载于:https://www.cnblogs.com/zjypp/archive/2009/01/08/2319423.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值