C# winform在线程中给控件赋值

C# winform在线程中给控件赋值确定要报错,这要是打印日志什么的就很烦,好在用代理就可以解决这个问题

public delegate void AppendStringCallback(string text);
        public static event AppendStringCallback appendStringCtrl;
        public delegate void AppendObjectCallback(object[] obj);
        public static event AppendObjectCallback appendObjectCtrl;

        private void Form1_Load(object sender, EventArgs e)
        {
            Connect();
            label1.Text = strOpen;
            appendStringCtrl = new AppendStringCallback(AppendString);
            appendObjectCtrl = new AppendObjectCallback(AppendObject);
        }

        //绑定数据
        private void BandData(string curTime, string mobile, string res)
        {
            if (dgvCount == 1000)
            {
                dgvCount = 1;
                dgv.Rows.Clear();
            }

            object[] obj = new object[4];
            obj[0] = dgvCount;
            obj[1] = curTime;
            obj[2] = mobile;
            obj[3] = res;
            //if (res == "1")
            //    obj[3] = "成功";
            //else
            //    obj[3] = "失败";
            //dgv.Rows.Add(obj);
            appendObjectCtrl(obj);

            dgvCount++;
        }

        private void AppendString(string text)
        {
            if (this.rtxtMes.InvokeRequired)
            {
                this.rtxtMes.BeginInvoke(new AppendStringCallback(AppendString), new object[] { text });
            }
            else
            {
                SetMessage(text);
            }
        }

        private void AppendObject(object[] obj)
        {
            if (this.dgv.InvokeRequired)
            {
                this.dgv.BeginInvoke(new AppendObjectCallback(AppendObject), new object[] { obj });
            }
            else
            {
                dgv.Rows.Add(obj);
            }
        }

这要调用就没有什么问题了

        private void button1_Click(object sender, EventArgs e)
        {
            Thread objThread = new Thread(new ThreadStart(delegate
            {
                BandData(DateTime.Now.ToString(), "152019666666", "哈哈");
                appendStringCtrl("sefsef");
            }));
            objThread.Start();
        }



  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值