我们在做窗体应用程序的时候,有时候穾获取当前窗体的信息,或者调用其他窗体的控件。
这里我介绍两种方法来实现。
当我们需要在窗体中调用其他窗体的控件时,我们可以用控件.CheckForIllegaCrossThreadCalls=false;
例如:Button.CheckForIllegalCrossThreadCalls=false;
当然我们也可以让整个窗体可以跨线程访问
Form.CheckForIllegalCrossThreadCalls=false;
这样我们就可以在其他窗体中访问这个窗体的控件或者属性。
这样也许不是最安全的方法,有的时候调试会给我们报错。
这里我再介绍一种可以跨线程访问的方法。
Invoke 跳到窗体线程上去执行委托上的函数
首先我们需要声明一个委托,
public delegate void DelSetTime(object str);
然后我们只需要准备好需要执行的函数,
public void setTime(object str);
下面我们就可以将委托放到窗体的线程上去执行
Delegate d=new DelsetTime(setTime);
this.Invoke(d,Datetime.Now.ToString());
这样我们就可以实现跨线程访问了。
每一个窗体都有一个窗体线程,这个线程主要是完成窗体的绘制,及窗体控件
上的事件代码的处理,这个线程我们称它为窗体线程或者主线程。
很多时候我们需要为窗体添加线程来处理数据,这时我们就可以这些新创建的线程设置为后台线程,当窗体关闭时,这些后台
线程也会跟着结束。
ThreadStart ths=new ThreadStart(Demo);
Thread th= new Thread(ths);
th.Start();
th.IsBackground=true;