从另一个线程关闭main

时间:2009-04-02 09:33:17

标签: c# multithreading

我正在尝试关闭另一个线程完成时的应用程序。 我正在使用c#。下面的代码只是一个例子

class main
{
  constuctor
  {
    thread t = new thread(open loading screen);

  }

  public void open loading screen()
  {
    if (error) 
     exit program
      application.exit(); // doesn't work
     this.Close; // doesn't work
    thread.abort or mainform.abort doesnt work.
  }
}

如果我用application.exit在main上调用一个函数,这不起作用,因为调用是从另一个线程进行的。

那么如何退出程序?

提前致谢

5 个答案:

答案 0 :(得分:1)

工作线程应设置变量或发出主线程应定期检查的某种事件 - 它可以在正常情况下以正常方式关闭。

答案 1 :(得分:1)

在主线程中使用IsAlive来检查其他线程是否已经结束,如果有,则退出。

http://www.java2s.com/Code/CSharp/Thread/UseIsAlivetowaitforthreadstoend.htm

答案 2 :(得分:1)

使用后台工作者类而不是普通的线程。 backgroundworker可以用于在UI线程之外的另一个线程中工作。它还有一些方便的事件,可用于将进度更新发送回“拥有”线程。看看:

ProgressChangedRunWorkerCompleted

答案 3 :(得分:0)

在经过多次严厉批评之后,我认为我取得了一些进展。 我不是100%肯定,但你可以在构造函数完成并加载主窗体之前退出应用程序吗?

constuctor  {    thread t = new thread(open loading screen);  }

我在退出屏幕上使用main for和另一个之间的变量做同样的事情。如果它返回true,我在main中有一个应用程序出口。

一开始我有一个加载屏幕,但是主窗体尚未加载,并且调用是从构造函数进行的,并且construtor还没有完成。

还有一件事情应该是所有的线程/类/加载//程序设置都要在主构造函数中完成,或者其他一些方式如果是这样,请指教。

感谢

答案 4 :(得分:0)

这里是一行代码中的解决方案

mainForm.Invoke((MethodInvoker)(() => mainForm.Close()));

在mainform中有一个Closing事件,如果它在此

之后没有自行关闭,则会关闭该线程