首页 新闻 会员 周边

UI多线程问题

0
悬赏园豆:50 [已解决问题] 解决于 2009-01-08 15:34

单击一个按钮,用thread的start()来启动一个类里面的方法,类里面的方法触发了一个事件,

我在委托事件的方法里输出MessageBox.Show(InvokeRequired.ToString());

显示是false.为什么会是false了?start()触发的呀.不大明白.希望大虾帮帮我!

依人的主页 依人 | 初学一级 | 园豆:14
提问于:2009-01-08 13:10
< >
分享
最佳答案
0

如果你在新线程中直接使用MessageBox.Show那么程序会死,因为MessageBox是UI的一部分,没有Invoke的情况下不能跨线程调用

如果你在MessageBox.Show的时候已经是Invoke了,那么InvokeRequired自然是false,因为Invoke就是将一部分逻辑从子线程提升到UI主线程去运行

Gray Zhang | 专家六级 |园豆:17610 | 2009-01-08 15:18
其他回答(3)
0
Code
private delegate void ExecuteHandler();
public void CloseWaitForm()
{
if (InvokeRequired)
Invoke(
new ExecuteHandler(Close));
else
Close();
}

希望有所帮助。

winzheng | 园豆:8797 (大侠五级) | 2009-01-08 13:16
0

MSDN上就解释很详细

Kevin-moon | 园豆:100 (初学一级) | 2009-01-08 13:52
0

你可以每一部都MessageBox.Show(InvokeRequired.ToString());输出一下,看看是哪里出了问题,你的代码可能是一部分,我没有看的很明白。另外你再参照一下MSDN,看看有没有出现他的的那种情况

GUO Xingwang | 园豆:3885 (老鸟四级) | 2009-01-08 14:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册