zoukankan      html  css  js  c++  java
  • C#多线程 后台运行 访问控件fm

    1、在开启一个线程,在后台运行

    //要在后台执行的内容
            void doSth()
            { }
            void test()
            {
                ThreadStart ts = new ThreadStart(() => doSth());
                Thread t = new Thread(ts);
                t.IsBackground = true;
                t.Start();
            }

    2、启用后台运行后,需通过以下代码去访问控件,此方法对基于Control类的控件均适用,其它一些特殊控件可按照此方法去扩展。

            //控件访问通用代码
            void ControlThreadModify(Control ctrl, Action action)
            {
                if (ctrl.InvokeRequired)
                    ctrl.BeginInvoke(new Action<Control, Action>((t1, t2) => { ControlThreadModify(t1, t2); }), ctrl, action);
                else
                {
                    if (action != null) action();
                }
            }
            //调用示例,设置窗体的文本为“a”
            void exp()
            {
                ControlThreadModify(this, () => this.Text = "a");
            }

    下面内容可配合使用……

            //设置控件下面所有控件的有效属性
            void FormEnabled(bool b, Control ctrl)
            {
                foreach (Control c in ctrl.Controls)
                {
                    c.Enabled = b;
                    if (c.Controls.Count > 0)
                        FormEnabled(b, c);
                }
            }
            public void Method1(Data data) {     
            //线程的方式     new Thread((ThreadStart)delegate    
            {         
                    forint i=0 ;i<3;i++)         
                    {             
                        if(满足条件)             
                        {                 
                            break;             
                        }             
                        else            
                        {                
                            System.Threading.Thread.Sleep(50000);//线程休眠50秒                 
                            this.Invoke((EventHandler)delegate{MethodA(data);});             
                        }         
                    }     
            }).Start(); }
            public void Method1(Data data) {     
            //线程的方式     
                new Thread((ThreadStart)delegate    
                {         
                    forint i=0 ;i<3;i++)         
                    {             
                        if(满足条件)             
                        {                 
                            break;             
                        }             
                        else            
                        {                
                            System.Threading.Thread.Sleep(50000);//线程休眠50秒                 
                            this.Invoke((EventHandler)delegate{MethodA(data);});             
                        }         
                    }     
                }).Start(); 
            }


    本人原创,欢迎大家指正!转载请注明出处

  • 相关阅读:
    GUI学习笔记之一“Hello world”程序
    GDI和GUI的区别
    Convert.Int32、(int)和int.Parse三者的区别
    华为机试题汇总
    算法导论 第7章 课后习题
    算法导论 第8章 线性时间排序 课后习题
    算法导论 第21章 不相交集合的数据结构
    [转载]NIM(1) 一排石头的游戏
    算法导论 第22章 图论之拓扑排序
    编程珠玑第八章 算法设计艺术
  • 原文地址:https://www.cnblogs.com/fm168/p/2920203.html
Copyright © 2011-2022 走看看