c#和控制过程

c#和控制过程,c#,.net,C#,.net,我坚持使用控制日志 private void btPullLinks_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { Run_cmd(); } public void Run_cmd() { StringBuilder outputBuilder; ProcessStar

我坚持使用控制日志

private void btPullLinks_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            Run_cmd();
        }

        public void Run_cmd()
        {
            StringBuilder outputBuilder;
            ProcessStartInfo processStartInfo;
            Process process;

            outputBuilder = new StringBuilder();

            processStartInfo = new ProcessStartInfo();
            processStartInfo.CreateNoWindow = true;
            processStartInfo.RedirectStandardOutput = true;
            processStartInfo.RedirectStandardInput = true;
            processStartInfo.UseShellExecute = false;
            processStartInfo.Arguments = @"c:.......py";
            processStartInfo.FileName = @"...../python.exe";

            process = new Process();
            process.StartInfo = processStartInfo;
            process.EnableRaisingEvents = true;
            process.OutputDataReceived += new DataReceivedEventHandler
            (
                delegate (object sender, DataReceivedEventArgs e)
                {
                    outputBuilder.Append(e.Data);
                    txtoutpute.text = e.Data;
                }
            );

            process.Start();
            process.BeginOutputReadLine();
            process.WaitForExit();
            process.CancelOutputRead();

            // use the output
            outputBuilder.ToString();

        }
如何将输出实时记录到控制中

我的目标是将数据从委托函数记录到.Net控件


尝试这里提供的解决方案

我不知道为什么在事件处理程序中,运行时会抛出此异常。通常,运行时处理调用上下文,并通过主线程执行事件处理程序例程

但如果无法摆脱它,请尝试(在Program.cs->Main()中)


你有什么问题?您是否已选中所需的
txtoutput.invokererequired
?您是否收到错误?@johnnymapp抛出错误“跨线程操作无效…”,因为我试图在委托函数内登录到txtOutput此错误不应发生,因为您正在事件处理程序中写入文本框。但是如果您无法摆脱它,请尝试(在Program.cs->Main())
Form.CheckForIllegalCrossThreadCalls=false@OguzOzgul解决了这个问题,将其作为答案发布
Form.CheckForIllegalCrossThreadCalls = false;