Ни как. ProcessStartInfo отработал и умер. Вы сами сказали вам нужен поток, так и создайте его.
Лучше оберните все в класс, где будете дергать свой скрипт раз в 200 мс.
public class ProcInfo{
public DateTime Start{get; private set;}
public DateTime Stop{get; private set;}
public string Errors{get; private set;}
public string Output{get; private set;}
// .... что то еще
}
var procInfo = new List<ProcInfo>();
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var worker = new Worker();
worker.Start();
Thread.Sleep(1000); // тут можно поставить Console.ReadLine(); и ждать вашего ввода, в общем на ваше усмотрение.
Console.ReadLine();
worker.EmergencyExit();
}
}
public class Worker
{
private const string PythonPath = @"C:/Python/Python38-32/python.exe";
private const string PyScript = @"Load.py";
private const int Interval = 200;
private Thread _thread = null;
private readonly List<ProcInfo> _infos = new List<ProcInfo>();
private void Run()
{
var processInfo = new ProcInfo { Start = DateTime.Now };
var psi = new ProcessStartInfo
{
FileName = PythonPath,
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
Arguments = $"\"{PyScript}\" "/*// опустил для ясности все остальные аргументы*/
};
try
{
using var process = Process.Start(psi);
processInfo.Error = process.StandardError.ReadToEnd();
processInfo.Output = process.StandardOutput.ReadToEnd();
processInfo.Stop = DateTime.Now;
_infos.Add(processInfo);
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
Thread.Sleep(Interval);// эмулируем работу на самом деле у меня ничего не работает
processInfo.Error = e.Message;
processInfo.Stop = DateTime.Now;
_infos.Add(processInfo);
}
var delay = processInfo.Stop - processInfo.Start;
if (delay.TotalMilliseconds < Interval) Thread.Sleep(Interval - (int)delay.TotalMilliseconds); // скрипт отработал быстрее чем нужно ждем
Run(); // перезапускаем себя
}
public void Start()
{
_thread = new Thread(new ThreadStart(Run));
_thread.Start();
}
public void EmergencyExit()
{
_thread?.Abort();
}
}
public class ProcInfo
{
public DateTime Start { get; set; }
public DateTime Stop { get; set; }
public string Output { get; set; }
public string Error { get; set; }
}
}