আমি একটি প্রতিক্রিয়াশীল সংস্করণ তৈরি করেছি যা stdOut এবং StdErr এর জন্য কলব্যাকগুলি গ্রহণ করে।
onStdOutএবং onStdErr, অ্যাসিঙ্ক্রোনাস বলা হয়
যত তাড়াতাড়ি ডাটা (প্রণালী থেকে প্রস্থান করার আগে) আসার হিসাবে।
public static Int32 RunProcess(String path,
String args,
Action<String> onStdOut = null,
Action<String> onStdErr = null)
{
var readStdOut = onStdOut != null;
var readStdErr = onStdErr != null;
var process = new Process
{
StartInfo =
{
FileName = path,
Arguments = args,
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardOutput = readStdOut,
RedirectStandardError = readStdErr,
}
};
process.Start();
if (readStdOut) Task.Run(() => ReadStream(process.StandardOutput, onStdOut));
if (readStdErr) Task.Run(() => ReadStream(process.StandardError, onStdErr));
process.WaitForExit();
return process.ExitCode;
}
private static void ReadStream(TextReader textReader, Action<String> callback)
{
while (true)
{
var line = textReader.ReadLine();
if (line == null)
break;
callback(line);
}
}
ব্যবহারের উদাহরণ
নিম্নলিখিত এবং প্রিন্ট executableসঙ্গে চালানো হবেargs
- সাদা সাদা
- লাল মধ্যে স্টডিআর
কনসোল থেকে।
RunProcess(
executable,
args,
s => { Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(s); },
s => { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(s); }
);