控制台只关闭线程

本文关键字:线程 控制台 | 更新日期: 2023-09-27 18:01:51

我遇到了一个问题,即使线程在后台运行,当一个while(true)循环在主方法中没有自己运行(没有线程)时,应用程序关闭。

伪的例子:

public static void Method1() {
    while( true ) {}
}
public static void Method2() {
    while( true ) {}
}
public static void main() {
    Thread myThread1 = new Thread( () => Method1() );
    Thread myThread2 = new Thread( () => Method2() );
    myThread1.Start();
    myThread2.Start();
}

现在当程序运行时,它在启动线程后停止执行,即使线程正在运行无限while循环。我如何取消这个?我知道我可以在main方法中添加一个无限循环,但这似乎很奇怪。

有人建议我使用互斥锁或信号,但是我现在不知道从哪里开始使用这些或如何将它们应用到我的应用程序

控制台只关闭线程

我认为所有你应该需要的是设置线程的IsBackground属性为false:

http://msdn.microsoft.com/en-us/library/system.threading.thread.isbackground%28v=vs.110%29.aspx

当主线程退出时,应用程序退出。这是正常的。

您可以使用Thread.Join等待它们同时终止。

myThread1.Start();
myThread2.Start();
myThread1.Join(); 
myThread2.Join();

编辑:实际上,@adv12的答案更好:将线程设置为前台线程,以便应用程序在它们完成之前不会终止。

可以使用互斥锁,请参阅MSDN文档

在class

private static Mutex mut = new Mutex();
在你的方法中使用
mut.WaitOne();
mut.ReleaseMutex();

主进程将退出,但是线程将继续运行直到互斥锁被释放