c# и процесс для контроля - PullRequest
0 голосов
/ 20 марта 2020

Я застрял в журнале управления.

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 control.

Пробовал с решениями, предлагаемыми здесь. Операция с несколькими потоками недопустима: элемент управления 'textBox1' доступен из потока, отличного от потока, в котором он был создан [duplicate]

1 Ответ

1 голос
/ 20 марта 2020

Я не знаю, почему в обработчике событий среда выполнения выдает это исключение. Обычно среда выполнения обрабатывает вызывающий контекст и выполняет подпрограмму обработчика событий основным потоком.

https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/how-to-make-thread-safe-calls-to-windows-forms-controls

Но если вы не можете избавиться попробуйте (в Program.cs -> Main ())

Form.CheckForIllegalCrossThreadCalls = false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...