আমি একটি প্রতিক্রিয়াশীল সংস্করণ তৈরি করেছি যা 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); }
);