0

Visual Studioでコンパイルし、Windowsで何年も正常に実行している.NETプロジェクトがあります。この特定のプログラムを実行するためにMacOSXを使用するように移行したいので、それを可能にするために少しの間monoで作業してきました。結果は優れており、プログラムはモノラル(2.10.9、BTW)で期待どおりに実行されました。

唯一の問題は、プログラムが実行された後、プログラムが終了しないことです。これはシングルスレッドプロセスですが、その作業が完了すると(Main(string[])メソッドの最後に報告されます)、プロセスは終了しません。^Cシェルプロンプトに戻るにはが必要です。System.Environment.Exit(exitCode);最後に明示的な呼び出しを追加しても効果はありません。

そのMLスレッドは潜在的な解決策を提供しませんでしたが、私は数年前からこの種の問題についてもう1つの話をここで見つけました。

4

1 に答える 1

0

Rolf(質問に対する彼のコメント)は正しかった、vmはシャットダウン時にデッドロックしていた。

このアプリケーションでIKVMを使用していますが、JVM<->CLR相互運用機能をクリーンアップするためにvmシャットダウン時にスレッドを開始する必要がある特定の状況があります。これは明らかにmonoではうまくいきません(ただし、.NETでは常に機能します)。

これは、このバグをmonoプロジェクトに提出したIKVMの作成者によってIKVM開発者リストのスレッドで発見されました。

java.lang.System.exit(exitCode)私の場合の回避策は、プログラムを自然に終了させたり、を使用したりするのではなく、明示的に呼び出すことでしSystem.Environment.Exit(exitCode)た。これにより、IKVMはVM終了ライフサイクルの外でシャットダウンできるため、モノラルバグを回避できます。

于 2012-06-16T12:41:01.170 に答える