3

私は、C# を使用して Visual Studio 2010 の WinForms で一種の IDE のようなプログラムに取り組んでいます。2 つのテキスト ボックス、2 つのボタン、およびコンソール ウィンドウで動作するようになりました。CodeDomProvider最初のテキスト ボックスは、コンパイル ボタンを押してコンパイルされるC# コードを記述するために使用されます。次に、問題または成功のメッセージが 2 番目のテキスト ボックスに表示されます。成功した場合は、実行ボタンを押してコンソール ウィンドウで実行できます。

私がやりたいことは、コンパイルされたプログラムを別のウィンドウで実行しないことです。

出力を 2 番目のテキスト ボックスにリダイレクトする方法はわかりましたが、入力を取得するのに苦労しています。ある種の入力を取得するために、事前にテキストを入力して3番目のテキストボックスを作成しましたが、フォームがフリーズしてしまいます。これは、以下のコードで確認できます。

private void runButton_Click(object sender, EventArgs e)
    {
        secondBox.Text = "";

        Process process = new Process();
        process.StartInfo.FileName = Program;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardError = true;
        process.StartInfo.RedirectStandardInput = true;
        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.StartInfo.CreateNoWindow = true;
        process.Start();

        StreamReader reader = process.StandardOutput;
        StreamReader eReader = process.StandardError;
        StreamWriter writer = process.StandardInput;

        secondBox.Text += reader.ReadToEnd();
        secondBox.Text += eReader.ReadToEnd();
        writer.WriteLine(thirdBox.Text);
    }

(入力と出力を一度追加するだけでは、やりたいことがうまくいかないことはわかっていますが、一度に一歩ずつ進めています。)

この例のようにしてみました: Redirect console input and output to a textbox . writer代わりにビットを修正しましたprocess.StandardInput.WriteLine(thirdBox.Text);が、それでも機能しませんでした。

また、コンパイルしたプログラム内で何かを使おうとするとSystem.Console.ReadKey()、実際にはプロセス ウィンドウが作成されないため、エラーが発生するという問題もあります ( process.StartInfo.CreateNoWindow = true;)。私はこれを件名で見つけました: C#: can't ReadKey if my parent is a window application and it is redirecting my stdout , but I't know what to understand that other than running it in another console window?

コンソール出力の転送に関する多くの情報を見つけました (これは、それを理解するのに役立ちました) が、入力に関してはそれほど多くはありません。テキストボックスからの入力、またはコンパイルされたプログラムを埋め込む別の方法のいずれかを使用して、正しい方向を指し示していただければ幸いです。ありがとうございました。

4

0 に答える 0