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

    iamserge
    @iamserge Автор вопроса
    Дмитрий Беляев, Я вот так переделал .... Но вот в чем проблема ... Мне все равно приходится после нажатия ждать окончания работы скрипта, и только потом я могу получить вывод построчно, но уже готовый вывод, а не то что подгружается поступательно ... Скрипт то будет работать значимо дольше на практике и ждать пока он закончит довольно так неудобно ... эх не получается почему то.

    private async void button1_Click(object sender, EventArgs e)
            {
    
                try
                {
    
                    bool hasOutput, hasErrors;
    
                    string output = await process.StandardOutput.ReadLineAsync();
                    string errors = await process.StandardError.ReadLineAsync();
    
                    hasOutput = !(output is null);
                    hasErrors = !(errors is null);
    
                    if (hasOutput) richTextBox2.AppendText(output);
                    if (hasErrors) richTextBox2.AppendText(errors);
    
    
                }
    
                catch (Exception eU)
                {
    
                    // Сообщение о ошибке
                    MessageBox.Show(eU.Message);
    
                    // Информаци о ошибке
                    MessageBox.Show(eU.ToString());
    
                }
    
    
            }
  • Как сделать постоянный фоновый Process в C#?

    iamserge
    @iamserge Автор вопроса
    Дмитрий Беляев, Все верно, это немногое что я точно помню :) Но пока вот так вот,

    Feature 'nullable reference types' is not available in C# 7.3. Please use language version 8.0 or greater.

    Похоже придется обновиться как то ... Надеюсь это тоже free иначе у меня будут проблемы. Одно правда не понял, как вы умудрились все "упаковать" в одну функцию, надо будет попробовать переделать это в процедуру и при запуске приложения вызывать ее. Если все как я понял, то оана должна запуститься и себе спокойно регулярно выдавать мне все что сделал скрипт на python ...
  • Как сделать постоянный фоновый Process в C#?

    iamserge
    @iamserge Автор вопроса
    Дмитрий Беляев, Т.е. я жму на кнопку один раз (более не получается, ошибка) и пока скпирт не закончит - ничего от него не получить ... Ну и через 5 секунд он мне от первого нажатия выдает сразу все что было за раз

    Next step 0
    Next step 1
    Next step 2
    Next step 3
    Next step 4
    Next step 5
    Next step 6
    Next step 7
    Next step 8
    Next step 9
    Next step 10
  • Как сделать постоянный фоновый Process в C#?

    iamserge
    @iamserge Автор вопроса
    Дмитрий Беляев, Спасибо, хотел бы сказать что стало лучше, но вот на что он ругается ...

    'The stream is currently in use by a previous operation on the stream.'


    Это при повторном нажатии на кнопку, через пару секунд после старта приложения, т.е. к тому времени уже точно что то на вывод то должно быть ... При этом по факту обернул в try {} catch {} и о чудо заработало, НО! у меня есть только одна попытка после запуска и мне так или иначе приходится ждать ...

    Т.е. этот код срабатывает, но все равно нужно ждать все 5 секунд пока скрипт не закончит. Ничего каждые 0,5 секунды от него получить не удается никак. Пробовал ReadLineAsync(), но там с Result не выходит использовать await для строки, не совсем ясно что делать ...

    В общем то проблема как и ранее, все равно ждать приходится так или иначе, а ведь скрипт мне каждые 0,5 секунды что то да выдает =(
  • Как сделать постоянный фоновый Process в C#?

    iamserge
    @iamserge Автор вопроса
    Получилось хм .... Но все равно форма висит до последнего ... Т.е. вот так вот пять секунд все равно придется ждать, ну или ждать заранее, чтобы потом получить готовый результат =(

    private void button1_Click(object sender, EventArgs e)
            {
    
                output = process.StandardOutput.ReadLineAsync().Result;
                errors = process.StandardError.ReadLineAsync().Result;
    
                richTextBox2.AppendText(errors);
                richTextBox2.AppendText(output);
    
            }
  • Как сделать постоянный фоновый Process в C#?

    iamserge
    @iamserge Автор вопроса
    cicatrix, Да, было бы проще, но у меня есть проблемы и зависимость от python, там очень спицифич. API предлгают только на нем официально и выбора пока нет ...
  • Как сделать постоянный фоновый Process в C#?

    iamserge
    @iamserge Автор вопроса
    Спасибо, но у меня это скорее хобби и я пока мало готов к таким подвигам, да еще и новые библиотеки осваивать. Вожусь в рамках Visual Studio Community 2019 b и ни шагу в сторону :) Да и я с этим еле разобрался ...
  • Как сделать постоянный фоновый Process в C#?

    iamserge
    @iamserge Автор вопроса
    Попробовал вторым способом, но получил:

    'StandardOut has not been redirected or the process hasn't started yet.'


    Т.е. просто вытащил часть отдельно, чтобы пока попробовать получить вручную в процессе работы скрипта ...
    private void button1_Click(object sender, EventArgs e)
            {
    
                output = process.StandardOutput.ReadToEndAsync().ToString();
                errors = process.StandardError.ReadToEndAsync().ToString();
    
                richTextBox2.AppendText(errors);
                richTextBox2.AppendText(output);
    
            }


    Т.е. процесс начался точно, видимо мои настройки для процесс process не работают? Просто больше не знаю в чем еще может быть дело, если оставить там где был код, т.п. при запуске формы, то вывод вот такой:

    System.Threading.Tasks.Task`1[System.String]System.Threading.Tasks.Task`1[System.String]


    У меня такое чувство, что я интуитивно это неверно понял, но вроде бы как где бы тут быть подвоху если все называется крайне очевидно ...
  • Как создать DateTime с TimeZoneInfo не меняя время?

    iamserge
    @iamserge Автор вопроса
    Вроде бы как это заработало, просто у меня много мест которые нужно сводить воедино на МСК и центр. европу и я сам сейчас понять не могу правильно или нет, просто потому что так виртуозно во времени не ориентируюсь :) Но похоже что это оно т.е. решение ...
  • Куда пропала Новая Зеландия?

    iamserge
    @iamserge Автор вопроса
    GavriKos, Т.е. у меня есть дата и время, как строка. Есть место, нужно добавить к нему часовой пояс. То есть

    Сначала есть: 2020-08-17 02:00:00 // Просто время события в NZ
    Потом нужно: 2020-08-17 02:00:00+12:00 // Отметить часовоя пояс т.к. я знаю, что это у них но время дано без часового пояса
    В итоге сделать: 2020-08-16 17:00:00+03:00 // Когда это все в МСК
  • Куда пропала Новая Зеландия?

    iamserge
    @iamserge Автор вопроса
    GavriKos, А так это разве не готовая? Т.е. у меня он есть, но его как города там нету вот в чем дело ... Еще есть London к примеру, но с ним проблем никаких нет.

    Не понимаю о чем вы, что может быть еще более готовым в этой ситуации?
  • Куда пропала Новая Зеландия?

    iamserge
    @iamserge Автор вопроса
    Мне нужна столица, т.е. Wellington ... Но я правда два этих пояса вижу первый раз ... Вродебы как он на самом краю этого архипелага Chatham и туда относится? Т.е. она у них как то прямо на границе почти, жуть как заморочено все ...
  • Как получить отслеживаемый и постоянный как поток ProcessStartInfo в C#?

    iamserge
    @iamserge Автор вопроса
    Владимир Коротенко,

    singleton

    Спасибо, у меня от переизбытка новых слов сегодня явно перегруз будет ... Но выглядит заманчиво. Пока пойду готовить мидии в словочном соусе, подумаю над всем этим :)
  • Как получить отслеживаемый и постоянный как поток ProcessStartInfo в C#?

    iamserge
    @iamserge Автор вопроса
    Владимир Коротенко, А как его "ловить" потом? Т.е. я пробовал создать Worker, глобально, ну а потом его в таймере как то "опросить что там" ... То есть для меня этот поток потерялся что ли, он там внутри стартует и как к нему подобраться то потом из моего таймера?
  • Как получить отслеживаемый и постоянный как поток ProcessStartInfo в C#?

    iamserge
    @iamserge Автор вопроса
    Спасибо, попробовал это воспроизвести, частично попробовал переделать с консольного на WinForms, но это пока дело десятое ... На самом деле совсем не вижу, как тут собственно по таймеру пытаться понять что там вообще скрипт делает и куда то это деть ... На деле в RichTextBox нужно, видимо от того что конструкция этам мне мало знакома ...

    И да using исправил, говорит что у меня 8.0 и такой синтаксис не подходит, получилось на вид точно так как я делал раньше. Правда теперь все это глубоко внутри класса и потока ...
  • Как получить отслеживаемый и постоянный как поток ProcessStartInfo в C#?

    iamserge
    @iamserge Автор вопроса
    Петр, Странно, а ведь странно я то там 20 секунд как минимум "что-то делаю" ... Похоже я что то не так сделал все таки ...
  • Как получить отслеживаемый и постоянный как поток ProcessStartInfo в C#?

    iamserge
    @iamserge Автор вопроса
    Т.е. непонятно про контейнеры, да и вообще назначение Display, для того ли оно чтобы вывод собирать куда-то и может выводить его или ... ?

    И про то как срабатывает опрос WaitForExit(0), что вообще подразумевается под его true/false ... ?
  • Как получить отслеживаемый и постоянный как поток ProcessStartInfo в C#?

    iamserge
    @iamserge Автор вопроса
    Попробовал, кажется "оно" заработало, правда вот

    var exited = process.WaitForExit(0);
                    TechLog.AppendText(exited.ToString());


    завалил меня сначала false, а потом изобилием true, хотя он судя по всему работает как что то получить я пока не понял ...

    В то же время Display я сделал как отдельно функцию, но не совсем понял что в ней и быть то должно ... https://docs.microsoft.com/ru-ru/dotnet/api/system... вот тут в примере, вроде бы как заполняется некий output ....

    То есть мне так же нужно создать свои контейнеры и туда все собирать? При этом странно, что у меня куча True от этого опроса, т.к. я пока скприт напичкал вот чем, там вроде бы как и нет ничего ...

    time.sleep(5)
    print("1 Sleep")
    
    time.sleep(5)
    print("2 Sleep")
    
    time.sleep(5)
    print("3 Sleep")
    
    time.sleep(5)
    print("4 Sleep")
    
    time.sleep(5)
    print("5 Sleep")
  • Как получить отслеживаемый и постоянный как поток ProcessStartInfo в C#?

    iamserge
    @iamserge Автор вопроса
    Честно сказать не силен в потоках, т.е. последний мой опыт это лет 10 назад потоки в Delphi, оттого я и знаю в общих чертах как это работает. Но тут не совсем понятно, зачем нужен список и как собственно поток сюда добавить, ведь поток само создается как объект из готового класса ... Вот собственно самый простой пример, https://metanit.com/sharp/tutorial/11.2.php

    Но как оно все еще в класс оборачивается? Да еще и работает не очень понятно ... Ниже в целом все что у меня вообще происходит, параметры это просто переменные, которые я перед этим по ситуации заполняю из того что есть ... Но это все по искомому вопросу что есть как таковое ...

    ProcessStartInfo psi = new ProcessStartInfo();
                        psi.FileName = @"C:/Python/Python38-32/python.exe";
                        var PyScript = @"Load.py";
    
                        psi.UseShellExecute = false;
                        psi.CreateNoWindow = true;
                        psi.RedirectStandardOutput = true;
                        psi.RedirectStandardError = true;
    
                        var errors = "";
                        var output = "";
    
                        psi.Arguments = $"\"{PyScript}\" \"{URIForSaveTicks}\" \"{SymbolForLoad}\" \"{YearFrom}\" \"{MonthFrom}\" \"{DayFrom}\" \"{HoursFrom}\" \"{MinutesFrom}\" \"{SecondsFrom}\" \"{msFrom}\" \"{YearTo}\" \"{MonthTo}\" \"{DayTo}\" \"{HoursTo}\" \"{MinutesTo}\" \"{SecondsTo}\" \"{FromFullOneString}\"";
    
                        using (var process = Process.Start(psi))
                        {
                            errors = process.StandardError.ReadToEnd();
                            output = process.StandardOutput.ReadToEnd();
                        }


    Т.е. в примере, поток создается и сам там по себе работает, правда без всякого учета что нужно получать результат работы скрипта, а не просто выводит готовое в консоль ... Вообще как убрать ProcessStartInfo и исполнить тоже самое в потоках для меня тоже темный лес ...

    Если можете, напишите пожайлуста как это выглядит или может ссылка какая есть на такие более продвинутые случаи ...
  • C# как задать Zoom в timespan?

    iamserge
    @iamserge Автор вопроса
    https://docs.microsoft.com/en-us/dotnet/api/system...

    Не миогу заполнить, примеров нет и описания толком нет