C# 在单独的类中处理standardError
当进程是在一个单独的*.dll文件中创建时,我很难将控制台应用程序的输出重定向到Windows窗体应用程序(请原谅这个术语太草率,但我对编程还不熟悉)。我遇到了这个链接(我可能会采用他的方法),详细说明了一个类似的问题:我可以从控制台读取一行,但如何让它保持打开状态 所以基本上我的问题是如何从一个单独的类中正确地访问streamreader输出 在本地调用时,下面的代码可以完美地工作C# 在单独的类中处理standardError,c#,process,streamreader,C#,Process,Streamreader,当进程是在一个单独的*.dll文件中创建时,我很难将控制台应用程序的输出重定向到Windows窗体应用程序(请原谅这个术语太草率,但我对编程还不熟悉)。我遇到了这个链接(我可能会采用他的方法),详细说明了一个类似的问题:我可以从控制台读取一行,但如何让它保持打开状态 所以基本上我的问题是如何从一个单独的类中正确地访问streamreader输出 在本地调用时,下面的代码可以完美地工作 private void exampleErrorRedirection() { Pro
private void exampleErrorRedirection()
{
Process proc = new Process();
proc.StartInfo.FileName = /exampleconsoleapp.exe;
proc.StartInfo.Arguments = "some arguments that work";
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
if (!proc.Start())
{
Console.WriteLine("Error starting");
return;
}
StreamReader reader = proc.StandardError;
string line;
while ((line = reader.ReadLine()) != null)
{
textBoxForStandardError.Text = line;
}
proc.Close();
}
但是,我希望能够在调用时将输出从单独的类重定向。Atm I只能从控制台获取第一条线路,它不会更新
private void exampleErrorRedirection()
{
exampleDLLFile.startProc ConsoleApp new exampleDLLFile.startProc();
ConsoleApp.Run();
while (convert.line != null)
{
textBoxForStandardError.Text = ConsoleApp.line;
}
}
如果类包含这样的方法:
public class convertFile
{
public string line;
public void Run()
{
Process proc = new Process();
proc.StartInfo.FileName = /exampleconsoleapp.exe;
proc.StartInfo.Arguments = "some arguments that work";
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
if (!proc.Start())
{
Console.WriteLine("Error starting");
}
StreamReader reader = proc.StandardError;
while ((line = reader.ReadLine()) != null)
{
line = reader.ReadLine();
}
proc.Close();
}
}
您需要为事件添加一个:
我添加了更多的代码来说明如何正确使用它。你能问一个更具体的问题吗?我仍然不明白一个人是如何从课外访问电子数据的。说真的,努比,但我在挣扎:(这个过程是从一个单独的类中开始的。我如何重定向e.数据,以便更新我的文本框?我不知道如何使文本框以某种方式等于e.数据。忽略这一点。原来我是在过程完成后订阅事件的。现在一切都很好!我很高兴这对您有所帮助。:-)
// process is Process
process.UseShellExecute = false;
process.RedirectStandardError = true;
process.ErrorDataReceived += DataReceived;
process.Start();
process.BeginErrorReadLine(); // start asynchronous error read
.
.
.
process.CancelErrorRead();
void DataReceived(object sender, DataReceivedEventArgs e) {
// e.Data is line of redirected standard error
}