0

Silverlight 4 と WinForms (net4) で IronRuby コンソールを構築しています。問題なく出力をリダイレクトできます。

MyRuntime = Ruby.CreateRuntime();
msOutput = new MemoryStream();
MyRuntime.IO.SetOutput(msOutput, Encoding.UTF8);
MyEngine = MyRuntime.GetEngine("rb");
MySource = MyEngine.CreateScriptSourceFromString("a='123'\nputs a", SourceCodeKind.Statements);
MySource.Execute();
textBox2.Text = ReadFromStream(msOutput);

ここで、入力もリダイレクトしたいのですが、スクリプトから常に「nil」を取得します。

MyRuntime = Ruby.CreateRuntime();
msOutput = new MemoryStream();
msInput = new MemoryStream();
MyRuntime.IO.SetOutput(msOutput, Encoding.UTF8);
MyRuntime.IO.SetInput(msInput, Encoding.UTF8);
MyEngine = MyRuntime.GetEngine("rb");
MySource = MyEngine.CreateScriptSourceFromString("a=gets\nputs a", SourceCodeKind.Statements);
byte[] byteArray = Encoding.UTF8.GetBytes("123");
msInput.Write(byteArray, 0, byteArray.Length);
MySource.Execute();
textBox2.Text = ReadFromStream(msOutput);

入力をリダイレクトするサンプルが見つかりません。例を送っていただけますか? ありがとうございました。

4

1 に答える 1

1

すぐに利用できるサンプル コードはありませんが、MemoryStream を使用する代わりに、ストリームを実装する必要があります。ストリームで読み取りが発生したら、テキスト ボックスの「内容」をストリームに送信する必要があります。コンテンツをいつ送信するかを決定するためのメカニズムが必要になります。たとえば、ユーザーがリターンを押したときなどです。また、読み取りをブロックするためのスレッドをセットアップする必要があり、AutoResetEvent を使用して、入力が完了したことをテキスト ボックスが通知するまでブロックする必要があります。

于 2010-10-06T05:16:12.403 に答える