我遇到了一个问题,即使线程在后台运行时,如果在主方法中没有运行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方法中添加一个无限循环,但这看起来很奇怪。
有人建议我使用互斥或联机电话,但我现在不知道从哪里开始或如何将它们应用到我的应用程序。
答案 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将退出,但线程将一直运行直到释放互斥锁