iamserge
@iamserge

Как сделать постоянный фоновый Process в C#?

В целом все очень просто ...
try
            {

                psi.FileName = @"C:/Users/User/AppData/Local/Programs/Python/Python38-32/python.exe";
                var PyScript = @"Load.py";

                psi.UseShellExecute = false;
                psi.CreateNoWindow = true;
                psi.RedirectStandardOutput = true;
                psi.RedirectStandardError = true;
 
                psi.Arguments = $"\"{PyScript}\"";

                var errors = "";
                var output = "";
                using (var process = Process.Start(psi))
                {
                    errors = process.StandardError.ReadToEnd();
                    output = process.StandardOutput.ReadToEnd();
                }

                richTextBox2.AppendText(errors);
                richTextBox2.AppendText(output);

            }

            catch (Exception eU)
            {

                // Сообщение о ошибке
                MessageBox.Show(eU.Message);

                // Информаци о ошибке
                MessageBox.Show(eU.ToString());

            }


from datetime import datetime
import sys
import pytz
import time

j = 0
while(True):
    time.sleep(0.5)
    print("Next step " + str(j))
    j = j + 1
    if(j > 10):
        break


Упростил Python, но на деле он должен себе работать даже дольше, намного дольше т.е. часами и периодически выдавать что-то о своей работе. Все это случается при запуске приложения С#, но вот проблема - приложение висит все время пока скприт не закончит работу и я получаю весь разельтат за один раз ....

Как наладить работу фоново, но не потерять связь с скриптом и получать результат его работы? Фоново т.е. не "подвешивать" интерфейс и отдать приложению самый большой приоритет, а результату от скрипта положенный минимум т.е. те наносекунды, что уходят на добавление пары строк в richTextBox2 ...
  • Вопрос задан
  • 181 просмотр
Пригласить эксперта
Ответы на вопрос 2
bingo347
@bingo347
Бородатый программер
Потому что метод ReadToEnd блокирует тред пока не прочитает весь стрим до конца
Используйте ReadLineAsync или ReadToEndAsync чтоб читать данные асинхронно.
Ответ написан
ImmortalCAT
@ImmortalCAT
C# loving
Посмотрите в сторону Background Process
А так же есть библиотека Quartz.NET
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
27 окт. 2020, в 15:42
1000 руб./в час
27 окт. 2020, в 15:30
100000 руб./за проект
27 окт. 2020, в 15:28
100000 руб./за проект