Задать вопрос
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 ...
  • Вопрос задан
  • 380 просмотров
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 2
ImmortalCAT
@ImmortalCAT
C# loving
Посмотрите в сторону Background Process
А так же есть библиотека Quartz.NET
Ответ написан
bingo347
@bingo347
Crazy on performance...
Потому что метод ReadToEnd блокирует тред пока не прочитает весь стрим до конца
Используйте ReadLineAsync или ReadToEndAsync чтоб читать данные асинхронно.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы