首页 新闻 赞助 找找看

子线程如何关闭主程序

0
悬赏园豆:20 [已解决问题] 解决于 2010-08-06 14:51

  [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

  .....

    thread = new Thread(new ThreadStart(test));
            thread.Start();

  .....

          public  void  test()

    {

      if(something)

        Application.Exit();

    }

 

  如上。我先在Form1里面启动了一个线程(thread)。线程用于检测一个调用的结果(something)。现在我想在线程中关闭Applicaion。求教,如何关闭。Application.Exit()貌似不行。因为thread还没有结束还是什么原因的。

问题补充: 各位达人。小弟菜鸟。建议如何做?可以正常回收主子线程。谢谢。望不吝赐教。
路西的灯的主页 路西的灯 | 初学一级 | 园豆:150
提问于:2010-08-04 16:02
< >
分享
最佳答案
1

System.Environment.Exit(0);

给分吧。

收获园豆:20
缤纷夏日 | 菜鸟二级 |园豆:425 | 2010-08-04 19:11
其他回答(4)
0

通过主线程去关闭窗口:

SynchronizationContext syn;
public Form1()
{
InitializeComponent();
syn
=SynchronizationContext.Current;
}

private void button1_Click(object sender, EventArgs e)
{
Thread thread
=new Thread(new ThreadStart(CloseWin));
thread.Start();
}
public void CloseWin()
{
syn.Post(MainCloseWin,
null);

}
public void MainCloseWin(object obj)
{
Close();
}
路过秋天 | 园豆:4787 (老鸟四级) | 2010-08-04 16:41
0

子线程关闭程序是不安全的。 建议当你想关闭时, 先退出子线程, 回到主线程再关闭

风浪 | 园豆:2996 (老鸟四级) | 2010-08-04 17:36
0

楼上正解

eaglet | 园豆:17139 (专家六级) | 2010-08-05 07:35
0

结束的方法有很多种,但子线程关闭主线程,或主线程退出时子线程没有退出,都会造成垃圾线程,很危险,不建议你这样子做.

倪大虾 | 园豆:275 (菜鸟二级) | 2010-08-05 20:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册