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
  • 相关阅读:
    使用keras构建简单的网络分类鸢尾花
    矩阵的秩 rank(A)
    矩阵的迹
    数学符号大全速查表
    迷茫的不是青春,是你们回望青春时失焦的眼神。
    服务器Windows Server 2008 远程控制安全设置技巧
    服务器安全维护配置和优化八大要点
    怎么把html页面中共用的底部代码做成共享模块
    回首2017,展望2018,今后的路我们一起走
    手机端rem如何适配_rem详解及使用方法2
  • 原文地址:https://www.cnblogs.com/xihong2014/p/13924114.html
Copyright © 2011-2022 走看看