特定の引数が渡された場合、コンソールアプリケーションとして使用できるWinFormプロジェクトがあります。私がここから読んだいくつかのヒントを使用して、私はこの作業を行うために次のコードを使用しました。WinForm/Consoleハイブリッドアプリケーションの動作
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AllocConsole();
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AttachConsole(int pid);
...
if (!AttachConsole(-1))
{
AllocConsole();
}
これは動作しますが、1件の迷惑な副作用があります - すべての出力は、バックグラウンドスレッドから生成されているように見えます。コマンドプロンプトからプログラムを実行すると、出力が表示される前に次のプロンプトが表示されます。
プロジェクトプロパティの出力タイプをコンソールアプリケーションに設定してこの問題を修正しましたが、今度は 'WinFormモード'で実行されていても常にコンソールウィンドウが表示されます。
プログラムがWinFormを表示しているときにコンソールが現在のプロセスであり、コンソールウィンドウが表示されないようにコンソールが動作する両方の環境を最大限に活用する方法はありますか?
更新日: 私はこのことを明確にしないことをお詫び申し上げます。私はこのようなProgram.csの中でコンソールとのWinFormモードを切り替えるいます:
// nowin is a bool that is set based on a parameter
if (nowin)
{
if (!AttachConsole(-1))
{
AllocConsole();
}
//... Console mode code here...
}
else
{
// run in window
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1(argDict));
}
あなたが発見したことは、現在WinFormアプリケーションが動作する「副作用」ではありません。あなたが別々のプログラムを持っていれば、それはかなり楽になります。これが可能なようにアプリケーションを設計してください。 –
[cmdから実行しているときのコンソールとwinformsアプリケーションの違い](http://stackoverflow.com/questions/7613880/difference-between-console-and-winforms-applications-when-running-from-cmd) –