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
  • 相关阅读:
    新浪微盘又是一个给力的产品啊,
    InfoQ: 百度数据库架构演变与设计
    列式数据库——Sybase IQ
    MapR初体验 淘宝共享数据平台 tbdata.org
    IBM正式发布新一代zEnterprise大型机(组图) 大型机,IBM,BladeCenter,美国,纽约 TechWeb News
    1TB is equal to the number of how many GB? 1PB equal to is equal to the number of TB? 1EB PB? | PCfault.com
    Cassandra vs HBase | WhyNosql
    The Hadoop Community Effect
    雅虎剥离开源软件平台 Hadoop ,与风投新建 Hortonworks 公司 品味雅虎
    RowOriented Database 、ColumnOriented Database 、KeyValue Store Database 、DocumentOriented Database
  • 原文地址:https://www.cnblogs.com/xihong2014/p/13924114.html
Copyright © 2011-2022 走看看