いくつかのライブラリをテストするために作成した winforms アプリがあります。すべてのテスト設定をコマンド ライン引数として渡すことができるように、このプログラムをセットアップしました。また、ファイルからこれらのテスト設定の 1 つ以上のセットを読み込み、設定のセットごとにこの winforms テスト アプリを 1 回起動する 2 つ目のコンソール アプリも作成しました。各テストの実行は CPU に打撃を与えるため、実行は同時に行うのではなく、順番に行います。次のように呼び出して、winforms アプリを起動します。
WinFormAppNamespace.Program.Main(settings)
これは最初は問題なく動作しますが、2 回目の実行では、winform アプリの Program.cs から次のような InvaldOperationException が返されます。
アプリケーションで最初の IWin32Window オブジェクトが作成される前に、SetCompatibleTextRenderingDefault を呼び出す必要があります。
どうやら、静的な main(...) メソッドを呼び出してアプリを起動すると、いくつかの状態が作成され、実行後に破棄されません。
これにはいくつかの解決策があります。
1)最初の実行後にアプリケーションを破棄します-これを行う方法がわかりません。静的メソッドを呼び出しましたが、何も返されませんでした。そのため、winforms アプリを実行してインスタンス化されたものにはアクセスできないと思います。
2) Program.cs で、SetCompatibleTextRenderingDefault(false) 呼び出しにチェックを入れて、ウィンドウが作成されない場合にのみ実行されるようにします。繰り返しますが、これを確認するためにインスタンス情報にアクセスできるかどうかはわかりません。
3) 独自のプロセスでアプリを実行します。これを機能させるには追加の app.config ファイルをコピーする必要があるため、これを回避しようとしていましたが、これが唯一のオプションであると考え始めています。
考え?