完成后,控制台单声道可执行文件不会退出

时间:2012-06-13 00:00:27

标签: macos mono ikvm

我有一个.NET项目,我用Visual Studio编译并在Windows上成功运行多年。我想转而使用Mac OS X来运行这个特定的程序,所以一直使用单声道工作一段时间就可以实现。结果非常好,程序在mono(2.10.9,BTW)下按预期执行。

唯一的障碍是程序在完成后不会退出。它是一个单线程进程,但是当它的工作完成时(它在Main(string[])方法结束时报告),进程不会退出;需要^C才能返回shell提示符。在最后添加明确的System.Environment.Exit(exitCode);调用无效。

我在几年前发现了另外一个关于这类问题的故事here,尽管ML线程没有提供任何可能的解决方案。

1 个答案:

答案 0 :(得分:0)

罗尔夫(在他对这个问题的评论中)是正确的,vm在关机时陷入僵局。

我在这个应用程序中使用IKVM,并且在某些情况下需要在vm shutdown时启动一个线程来清理它的JVM< - > CLR互操作机器;这显然不适合单声道(但总是在.NET中工作)。

IKVM的作者在a thread on the IKVM dev list上发现了这一点,他为this bug提交了单声道项目。

我的解决方法是明确调用java.lang.System.exit(exitCode),而不是简单地让程序自然终止或使用System.Environment.Exit(exitCode)。这允许IKVM在vm终止生命周期之外关闭,从而避免单声道错误。