关于线程的一个小问题

aierduo 2008-08-27 02:07:04
启动方法里
Thread th = new Thread(new ThreadStart (ShowFrom));
th.Start();
//做别的事

th.Abort();

Form1 f = new Form1();
f.ShowDialog();



private void ShowFrom()
{
Form2 f = new Form2();
f.ShowDialog();
}


问题:
如果在程序里调试,一切正常。
当时直接点击exe文件启动,在关闭“窗体2”之后显示的“窗体1”不在最顶层显示(被档住了)。

请问这是为什么?怎么解决?
在线等
...全文
81 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
aierduo 2008-08-27
大家都说清楚一点啊。
线程间的切换是可以用委托,但是页得invoke,而invoke的前提得有Control,我这这个是在一个类里,是没有Control的。
回复
silver0 2008-08-27
用委托
回复
aierduo 2008-08-27
改为Show我也试过了,不行。
如果不用abort(),那我怎么让线程停止呢?怎么能将Form2关闭呢
回复
slimfeng 2008-08-27
[Quote=引用 5 楼 aierduo 的回复:]
TopMost 已经设置了,没有用。
是不是在线程被Abort()之后From2没有及时的回收。导致Form1不能在顶层显示?
[/Quote]
由于采用ShowDialog()会阻塞当前线程,所以你用Abort可能不起作用,去掉abort试试。
或Form1改为Show
回复
aierduo 2008-08-27
有人在看吗?
回复
sxmonsy 2008-08-27
友情UP
回复
aierduo 2008-08-27
TopMost 已经设置了,没有用。
是不是在线程被Abort()之后From2没有及时的回收。导致Form1不能在顶层显示?
回复
aierduo 2008-08-27
Form2 是一个等待窗体。
将之show出来之后做一些加载数据的操作(可能要花很长时间),
然后加载完数据之后,就将From2关闭,执行主程序。
***********************************************
上面的代码在调试的时候是没问题的,但是直接点击exe文件时就有问题了。
回复
slimfeng 2008-08-27
没看明白你为什么要创建线程处理,至于需要的顶层显示Form1,可将Form1
的TopMost设置为true即可。
回复
aierduo 2008-08-27
哥们。我这个是在启动的Program.cs里写的。
请问怎么切换啊,这个类里没有control让我invoke啊
回复
greystar 2008-08-27
private void ShowFrom()
{
不在主线程里,不能调界面相关的.
Form2 f = new Form2();
f.ShowDialog();
}

要线程切换,看帮助InvokeRequired
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.