C#跨线程操作,传递很多数据给一个用户控件,然后用户控件显示数据。

之前传递一个数据,用delegate实现了显示,现在数据很多,都是显示到textbox中,就不知道怎么做了。我直接将数据传递给控件,再在控件中加个定时器定时刷新,也报错,... 之前传递一个数据,用delegate实现了显示,现在数据很多,都是显示到textbox中,就不知道怎么做了。我直接将数据传递给控件,再在控件中加个定时器定时刷新,也报错,很疑惑。 展开
 我来答
设计人生3n
2014-09-16 · 超过26用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:43.8万
展开全部
很多个这样的数一起刷新该如何用delegate实现显示呢?

我的解答如下:
利用委托传递参数的方法来将你的参数传递过去到UI线程,因为你用K串口读取的线程不是在UI线程中,所以需要用委托来将的你的参数传递过去
如:Invoke(new UpdateListview(UpdateListviewMethod), new object[] { e.SrcNum, e.PortData });
如果你有很多参数,你也可以自已将参数做成 new object[] { e.SrcNum, e.PortData }传递,或者将所以参数做成一个类来当成一个参数传递也可以
追问
我大概知道这么做,就是不知道怎么写,就把一个byte类型的数组传递到UI,麻烦你帮我写个简单的例子行吗?谢谢了。
追答

private delegate void DGUpdateUI(byte[] aryByte);//声明一个委托,空返回,带一个byte数组的参数

        private void button4_Click(object sender, EventArgs e)

        {

            //此处我自己启动一个新建的线程来模拟不是主线程

            Thread threadTest = new Thread(new ThreadStart(ThreadTestMethod));

            threadTest.Start();//线程启动

        }


        private void ThreadTestMethod()

        {

            Thread.Sleep(1000);

            byte[] aryByte = new byte[10];


            for (int i = 0; i < 10; i++)

            {

                aryByte[i] = (byte)(i * 2 + 3);

            }


            DGUpdateUI dgUI = new DGUpdateUI(UI);//定义一个委托

            //this.Invoke(dgUI, aryByte);//这个也是可以的,只不过此处只传一个参数

            this.Invoke(dgUI, new object[] { aryByte });//这个也是可以的,只不过可以传递N个参数

        }


        //  这个函数就可以从别的线程中得到数据,且将其显示到listbox中去

        private void UI(byte[] aryByte)

        {

            foreach (byte b in aryByte)

            {

                this.listBox1.Items.Add(b);

            }

        }

阳光的雷咩咩
2014-09-15 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7732万
展开全部
代码贴出来瞧瞧,或者留联系看。
追问
大致是这样的,我从串口读回来的数据,按顺序把有用的数据保存到用户控件的一个byte数组alldata[255]中,然后我要把这个数组中的数据组合好并显示到用户控件指定的文本框里。比如:
Ua = (alldata[10] * 256 + alldata[11]) / 100;
textBoxUa.Text = Ua.ToString();
很多个这样的数一起刷新该如何用delegate实现显示呢?
追答
希望你写个测试用例来,串口数据可以用timer模拟一些。没有测试方法就没法给你解决。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-09-15
展开全部
CheckForIllegalCrossThreadCalls
追问
虽然不是我要的,还是谢谢你回答。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式