控制台只关闭线程?

时间:2014-05-04 23:30:24

标签: c# multithreading mutex

我遇到了一个问题,即使线程在后台运行时,如果在主方法中没有运行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();
}

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

有人建议我使用互斥或​​联机电话,但我现在不知道从哪里开始或如何将它们应用到我的应用程序。

3 个答案:

答案 0 :(得分:4)

我认为您应该需要的是设置线程' IsBackground属性为false:

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

答案 1 :(得分:1)

当主线程退出时,应用退出。这很正常。

您可以使用Thread.Join等待它们两者终止。

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

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

答案 2 :(得分:0)

是的,您可以使用互斥锁,请参阅MSDN documentation

在课堂上

private static Mutex mut = new Mutex();

在您的方法中使用

mut.WaitOne();
mut.ReleaseMutex();

main将退出,但线程将一直运行直到释放互斥锁