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


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

  • 相关阅读:
    104每日博客
    924每日博客
    921每日博客
    928每日博客
    929每日博客
    930每日博客
    927每日博客
    大志非才不就,大才非学不成—我的博文资源汇总
    vue 项目搭建
    Vant 使用记录
  • 原文地址:https://www.cnblogs.com/fm168/p/2920203.html
Copyright © 2011-2022 走看看