0

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

唯一的问题是程序完成后不会退出。它是一个单线程进程,但是当它的工作完成时(它在Main(string[])方法结束时报告),进程并没有退出;^C需要返回到 shell 提示符。最后添加显式System.Environment.Exit(exitCode);调用没有任何效果。

几年前,我在这里只找到了一个关于这类问题的故事,尽管那个 ML 线程没有提供潜在的解决方案。

4

1 回答 1

0

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

我在这个应用程序中使用IKVM,在某些情况下它需要在 vm 关闭时启动一个线程来清理它的 JVM<->CLR 互操作机制;这显然不适用于单声道(但始终适用于.NET)。

这是由 IKVM 的作者在 IKVM 开发列表上的一个线程上发现的,他在 mono 项目中提交了这个错误。

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

于 2012-06-16T12:41:01.170 回答