多线程应用程序中调用窗体的一点心得
来源:互联网 发布:移动4g卡只能用2g网络 编辑:程序博客网 时间:2024/04/27 20:01
经过查阅MSDN才知道:
当程序运行时,我们已经开启了一个线程,UI 线程. 而平时的一般工作,比如说新开窗口啦,按钮事件啦,这都是在 UI 线程的管辖之下。而如果我们新建一个线程,当这个线程需要调用一个新窗口的时候,不可以直接在这个新线程之下调用,而是需要让 UI 线程去调用新窗口。而新的线程所做的是给UI线程发送一条信息,让它打开窗口。而做这一步,我们就需要用到 Delegate 技术。 如果一个控件的处理程序和操作它的代码不在同一线程中,则需要使用 控件名.Invoke 方法
代码片断如下:
//工作线程的代码将直接调用FOrm下定义的FormShow方法
ListenerThread()
{
//这是一个自由线程。不能在这里直接调用一个窗体
FormShow();//OK
}
delegate void FormHandler(DataSet ds);//声明一个委托
//定义一个方法此方法用来显示一个窗体
private void FormShow(DataSet ds)
{
if (!this.InvokeRequired) //如果当前线程不是主UI线程,返回true,否则,返回false.
{
frmBills fb = new frmBills();
fb.Show();
fb.Display(ds);
}
else
{
FormHandler fHandler = new FormHandler(this.FormShow); //创建一个新instance指向FormShow.
this.Invoke(fHandler, new object[] {ds}); //启动delegate
}
- 多线程应用程序中调用窗体的一点心得
- 多线程应用程序中调用窗体的一点心得
- 多线程应用程序中调用窗体的一点心得
- 多线程应用程序中调用窗体的一点心得
- 关于在窗体中使用多线程调用控件的方式
- JavaScript中如何实现多线程异步调用的一点研究
- 使用ASP调用WebService的一点心得
- 让窗体所有控件只读的一点心得
- C#2005 多线程中调用窗体控件
- c# vs2005 多线程中调用窗体控件
- C#窗体应用程序中,实现调用已有应用程序
- C#窗体应用程序中,调用已有应用程序(*.exe)
- windows应用程序窗体间的属性调用
- VC有关应用程序的平台版本区别的一点心得
- iphone应用程序内存处理的一点心得与疑问
- 使用多线程提高 Windows 窗体应用程序的性能时,必须注意以线程安全方式调用控件
- oracle10g中rownum的一点心得
- C#中const关键字的一点心得
- Spring下的Unit Test Notes 2nd
- 关于猫的小思考
- Enterprise Library是微软Patters & Practices 项目组
- 替换标准的 title alt 使其可以使用HTML
- "Error 503: Failed to load target servlet [portal]" in Workplace or Portal
- 多线程应用程序中调用窗体的一点心得
- 使用C#代码实现增加用户帐号
- 在WebWork中实现自己的Result Type
- 总结一些javascript代码,希望大家用得上,大家如果有更多,不妨也贴上来!愿我们做得更好!
- Object Pascal与C++竟然是相同的!
- 我国的软件业到底是什么样个现状呀?
- some FormatMessage wrapper
- Spring 下透明的让POJO 变为支持JMX的MBean
- 本地POSIX线程库(NPTL)