Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在单独的类中处理standardError_C#_Process_Streamreader - Fatal编程技术网

C# 在单独的类中处理standardError

C# 在单独的类中处理standardError,c#,process,streamreader,C#,Process,Streamreader,当进程是在一个单独的*.dll文件中创建时,我很难将控制台应用程序的输出重定向到Windows窗体应用程序(请原谅这个术语太草率,但我对编程还不熟悉)。我遇到了这个链接(我可能会采用他的方法),详细说明了一个类似的问题:我可以从控制台读取一行,但如何让它保持打开状态 所以基本上我的问题是如何从一个单独的类中正确地访问streamreader输出 在本地调用时,下面的代码可以完美地工作 private void exampleErrorRedirection() { Pro

当进程是在一个单独的*.dll文件中创建时,我很难将控制台应用程序的输出重定向到Windows窗体应用程序(请原谅这个术语太草率,但我对编程还不熟悉)。我遇到了这个链接(我可能会采用他的方法),详细说明了一个类似的问题:我可以从控制台读取一行,但如何让它保持打开状态

所以基本上我的问题是如何从一个单独的类中正确地访问streamreader输出

在本地调用时,下面的代码可以完美地工作

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
}