是这样的,我有两个页面from1和form2,form1里面有个button1
当我点击button1时,用线程的方式打开form2butto1_click事件里面写的代码是:
this.td = new Thread(ThreadOpenForm2);
this.td.Start();ThreadOpenForm2方法里写的是:
form2.ShowDialog();由于form2里面的控件太大了,加载特别慢,所以用线程来做的操作现在的问题是,当我点击button1时,线程开始执行,由于速度很慢,要很久才显示form2,
在显示form2之前如果我又点了一次button1,他就又执行了一次线程,最后系统显示了2个form2,我只要他显示一次。应该怎么锁定线程哦??请各位大侠帮我看看,在此先谢谢了。
当我点击button1时,用线程的方式打开form2butto1_click事件里面写的代码是:
this.td = new Thread(ThreadOpenForm2);
this.td.Start();ThreadOpenForm2方法里写的是:
form2.ShowDialog();由于form2里面的控件太大了,加载特别慢,所以用线程来做的操作现在的问题是,当我点击button1时,线程开始执行,由于速度很慢,要很久才显示form2,
在显示form2之前如果我又点了一次button1,他就又执行了一次线程,最后系统显示了2个form2,我只要他显示一次。应该怎么锁定线程哦??请各位大侠帮我看看,在此先谢谢了。
解决方案 »
- 无法处理消息。这很可能是因为操作“http://tempuri.org/IHQS_demo/test”不正确,或因为消息包含无效或过期的安全上下文令牌
- 使用GetWindowRect碰到的问题
- 100分求,在winform下Form1_Resize事件中修改pictureBox和label控件属性(size,Location)
- VS 2008 的 WinForms 的工程文件能否让 VS 2005 完美支持?
- IbatisNet问题多多 为什么不支持隐式转换?
- 请教一个C#代码超时则自动停止的问题
- 小妹求教!如何删除XML节点信息!
- 机子上装了VS.net2003 再装2005 的能装上么?希望大家给予建议!!!
- 关于数据库时间格式的问题?!!
- DLL程序能像应用程序那样获得自身所在路径吗?
- SOCKET传输中的中文转换问题
- Winform数据库连接安全问题
butto1_click事件里面写的代码
通过全局变量判断form2是否已经启动,
如果已经启动就不在开线程
如果没有启动,就开线程,标记已经打开!form2在关闭时需要更改全局变量的值
{}
或用lock,mutex
在问下呢??这个代码是写在那里的哦??button_click事件里面啊??
参考
form2.ShowDialog();
button1.Enabled = true;
[email protected]
你只要在butto1_click事件里先把
button1.Enabled 设置为 false然后在
form2.ShowDialog();
之后把
button1.Enabled 设置为 true
即可
if(!td.isAlive)
{
}
里面试试看
第二,在form1
this.td = new Thread(ThreadOpenForm2);
this.td.Start();
之后,将form1.button1.Enable=false.
在form2执行往后将form1.button1.Enable=true(防止跨线程访问即可);
这样可以防止线程被多次启动。