我们在做窗体应用程序的时候,有时候穾获取当前窗体的信息,或者调用其他窗体的控件。 这里我介绍两种方法来实现。
当我们需要在窗体中调用其他窗体的控件时,我们可以用控件.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;
原文:http://bingdao.sinaapp.com/net%E4%BD%93%E7%B3%BB/380.html
|