zoukankan      html  css  js  c++  java
  • 子线程更新UI多个控件

    线程里如果需要更新多个UI控件,怎么办
                Thread thread = new Thread(delegate()
                {
                    Thread.Sleep(50);
                    img = HttpOper(httpPath);
                    if (pb.InvokeRequired)
                    {

                        pb.Invoke(LoadPic,img);

                    }
                    else
                    {
                        pb.Invoke(LoadPic);
                    }
                });
                thread.Start();
    这是一个基本的线程,PB是UI控件,如果我还有其它的控件也需要更新,难道是这样写
                Thread thread = new Thread(delegate()
                {
                    Thread.Sleep(50);
                    img = HttpOper(httpPath);
                    if (pb.InvokeRequired)
                    {

                        pb.Invoke(LoadPic,img);

                    }
                    else
                    {
                        pb.Invoke(LoadPic);
                    }
                    if (pb1.InvokeRequired)
                    {

                        pb1.Invoke(LoadPic,img);

                    }
                    else
                    {
                        pb1.Invoke(LoadPic);
                    }
                    if (pb2.InvokeRequired)
                    {

                        pb2.Invoke(LoadPic,img);

                    }
                    else
                    {
                        pb2.Invoke(LoadPic);
                    }
                });
                thread.Start();

    ------解决思路----------------------
    你可以认为多个UI控件都属于同一个UI线程。因此,pb1.Invoke,和pb2.Invoke,和form1.Invoke没有本质的区别。
    因此可以利用一个通用的函数,来把一个操作(Action)放到UI线程上去执行:


    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void SendAction(Action action)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(action);
            }
            else
            {
                action();
            }
        }

        void Test()
        {
            Thread thread = new Thread(delegate()
            {
                Thread.Sleep(50);
                img = HttpOper(httpPath);

                this.SendAction(() => { pb1.Image = img; });
                this.SendAction(() => { pb2.Image = img; });
            });
            thread.Start();
        }
    }
    http://www.myexception.cn/c-sharp/1828967.html
  • 相关阅读:
    C#学习笔记之——矩形覆盖问题
    链表,栈,队列代码
    链表练习代码
    2012年全国计算机专业大学排名
    寄存器介绍
    win8 wifi开关显示关闭,且设置里面wifi开关显示灰色的解决办法
    360随身wifi无法使用临时解决方案大全
    锐捷客户端的校园网电脑如何转化成无线路由
    未完成数据结构题目
    数据结构代码1
  • 原文地址:https://www.cnblogs.com/xihong2014/p/13924114.html
Copyright © 2011-2022 走看看