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(); 
            }


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

  • 相关阅读:
    hdu4578 (多标记线段树)
    hdu4757 (可持久化字典树+LCA)
    CF940F Machine Learning (带修改莫队)
    csps模拟测试7576一句话题解
    csps模拟测试74梦境,玩具,飘雪圣域题解
    csps模拟测试7273简单的操作小P的2048小P的单调数列小P的生成树
    csps模拟测试707172部分题解myc
    莫队算法学习
    csps模拟69chess,array,70木板,打扫卫生题解
    csps模拟68d,e,f题解
  • 原文地址:https://www.cnblogs.com/fm168/p/2920203.html
Copyright © 2011-2022 走看看