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 { for(int 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 { for(int i=0 ;i<3;i++) { if(满足条件) { break; } else { System.Threading.Thread.Sleep(50000);//线程休眠50秒 this.Invoke((EventHandler)delegate{MethodA(data);}); } } }).Start(); }
本人原创,欢迎大家指正!转载请注明出处