/// <summary> /// 思考エンジンに接続する。 /// </summary> public void Connect(ProcessNegotiatorData engineData) { Disconnect(); lock (lockObject) { if (engineData == null) { throw new ArgumentNullException("engineData"); } var info = new ProcessStartInfo { FileName = engineData.ExeFilePath, WorkingDirectory = engineData.ExeWorkingDirectory, Arguments = engineData.ExeArguments, CreateNoWindow = true, UseShellExecute = false, RedirectStandardInput = true, RedirectStandardOutput = true, RedirectStandardError = false, }; var process = new System.Diagnostics.Process { StartInfo = info, }; // 子プロセスがいないとき、ここで例外が発生する。 process.Start(); // EXE用のprocess exeProcess = process; // remote service remoteService = new RemoteService( process.StandardOutput.BaseStream, // read stream process.StandardInput.BaseStream // write stream ); IsLowPriority = engineData.IsLowPriority; } }
/// <summary> /// 思考エンジンに接続する。 /// </summary> public void Connect(ProcessNegotiatorData engineData) { Disconnect(); lock (lockObject) { if (engineData == null) { throw new ArgumentNullException("engineData"); } var info = new ProcessStartInfo { FileName = engineData.ExeFilePath, WorkingDirectory = engineData.ExeWorkingDirectory, Arguments = engineData.ExeArguments, CreateNoWindow = true, UseShellExecute = false, RedirectStandardInput = true, RedirectStandardOutput = true, RedirectStandardError = false, StandardOutputEncoding = Encode, }; var process = new System.Diagnostics.Process { StartInfo = info, }; // 子プロセスがいないとき、ここで例外が発生する。 process.Start(); // 非同期での受信開始 writeStream = process.StandardInput.BaseStream; process.OutputDataReceived += DataReceived; process.BeginOutputReadLine(); // EXE用のprocess exeProcess = process; IsLowPriority = engineData.IsLowPriority; } }