关于线程的一个小问题

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”不在最顶层显示(被档住了)。

请问这是为什么?怎么解决?
在线等
...全文
115 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧