powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запуск консольной програмы
25 сообщений из 31, страница 1 из 2
Запуск консольной програмы
    #40064401
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть програма
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 private static void ConsoleMain(string[] args)
 {
     if (!int.TryParse(args[2], out int output_mask))
     {
           Console.WriteLine("Invalid argument 2.");
           return;
    }

    //set outputs according the mask
    for (i = 0; i < io_count; i++)
    {
        if ((output_mask & (1 << i)) > 0)
            digital_outputs[i].State = true;
        else
           digital_outputs[i].State = false;
    }
         
    Console.ReadKey();

}


в конце есть Console.ReadKey(); то есть програма должна остановиться и ждать нажатия клавиши. но когда я запускаю её консоль появляется и выходит.
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064402
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
програма должна
jenya7
Код: c#
1.
return

не должна
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064404
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
jenya7
програма должна
jenya7
Код: c#
1.
return

не должна

откуда return?
я запускаю так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
static string SendCommand(string exe_name, string args)
        {
            /* Create a new process object*/
            Process proc = new Process();
            /* StartInfo contains the startup information of the new process */
            proc.StartInfo.FileName = exe_name;
            proc.StartInfo.Arguments = args;
            /* These two optional flags ensure that no DOS window appears */
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.CreateNoWindow = true;
            /* This ensures that you get the output from the DOS application */
            proc.StartInfo.RedirectStandardOutput = true;
            try
            {
                // Start the process
                proc.Start();
                // Wait that the process exits
                proc.WaitForExit();
                // Now read the output of the DOS application 
                return proc.StandardOutput.ReadToEnd().ToString();
            }
            catch (Exception ex)
            {
                return "Error: " + ex.Message;
            }
        }
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064412
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
откуда return?
В смысле? Из твоего же кода. Выполнение доходит до return и завершается, никакого ReadKey там нет
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064413
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак не пойму - с какой целью тебе там ждать нажатия кнопки? И что за кейс вообще ты пытаешься решить?
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064415
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
jenya7
откуда return?
В смысле? Из твоего же кода. Выполнение доходит до return и завершается, никакого ReadKey там нет


return только если условие int.TryParse не выполнилось. но оно выполняется и я вижу лампочки зажигаются по маске
Код: c#
1.
2.
3.
4.
5.
6.
7.
for (i = 0; i < io_count; i++)
    {
        if ((output_mask & (1 << i)) > 0)
            digital_outputs[i].State = true;
        else
           digital_outputs[i].State = false;
    }



а проблема такая - dll устроен так что при удалении объекта digital_outputs - все выходы переходят в состояние off - лампочки гаснут.
ну вышла програма и вышла и хорошо. но лампочки остались гореть - значит объект digital_outputs остался в памяти?
что интересно - если убрать - Console.ReadKey(); - лампочки гаснут - то есть объект digital_outputs удаляется.
не могу понять что происходит.
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064424
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тут полная версия. виден visibility scope объекта digital_outputs.
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064522
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай
Код: c#
1.
2.
3.
4.
5.
6.
     if (!int.TryParse(args[2], out int output_mask))
     {
           Console.WriteLine("Invalid argument 2.");
    Console.ReadKey();
           return;
    }
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064545
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ни когда так не делай, тем более с консольными программы. Если нужна пауза в инструментах консоли полно способов, как это сделать.
начиная Pause и заканчивая всякими выкрутасами в PS.
консольная программа по возможности, не должна ожидать какого либо ввода. Весь ввод, всяких параметров, обычно делают в сценарии выполнения, а не в программе (в sh или bat\ps1 файле).
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064587
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
fkthat
Никак не пойму - с какой целью тебе там ждать нажатия кнопки? И что за кейс вообще ты пытаешься решить?

В режиме отладки окно вывода консольной программы закрывается сразу после завершения программы, и поэтому нужна задержка, что бы посмотреть, что ты там начудил.
В режиме "без отладки" консоль вывода остается доступной для просмотра.
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064612
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я не пойму почему объект digital_outputs остается при выходе из програмы если в конце присутствует Console.ReadKey();
без Console.ReadKey(); лампочки гаснут, значит digital_outputs удалился.
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064614
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
я не пойму почему объект digital_outputs остается при выходе из програмы если в конце присутствует Console.ReadKey();
без Console.ReadKey(); лампочки гаснут, значит digital_outputs удалился.

Наверно потому что в C# не деструктор, а финализатор, который вызывается не в момент удаления объекта, а позднее при очередной сборке мусора или завершении программы.

https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/classes-and-structs/destructors
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064626
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
jenya7
я не пойму почему объект digital_outputs остается при выходе из програмы если в конце присутствует Console.ReadKey();
без Console.ReadKey(); лампочки гаснут, значит digital_outputs удалился.

Наверно потому что в C# не деструктор, а финализатор, который вызывается не в момент удаления объекта, а позднее при очередной сборке мусора или завершении программы.

https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/classes-and-structs/destructors

я запускаю скажем 10-20 консольных програм. я могу потом вызвать garbage collector и удалить оставшиеся объекты если есть такие?
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064628
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
я запускаю скажем 10-20 консольных програм. я могу потом вызвать garbage collector и удалить оставшиеся объекты если есть такие?
Ты же запускаешь их в отдельных процессах, судя по коду
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064631
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
Dima T
пропущено...

Наверно потому что в C# не деструктор, а финализатор, который вызывается не в момент удаления объекта, а позднее при очередной сборке мусора или завершении программы.

https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/classes-and-structs/destructors

я запускаю скажем 10-20 консольных програм. я могу потом вызвать garbage collector и удалить оставшиеся объекты если есть такие?

Принудительная сборка мусора GC.Collect()

Но по-хорошему надо в своем классе прописывать интерфейс IDisposable и использовать оператор using

PS Это почитай
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064632
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
jenya7
я запускаю скажем 10-20 консольных програм. я могу потом вызвать garbage collector и удалить оставшиеся объекты если есть такие?
Ты же запускаешь их в отдельных процессах, судя по коду

ну да. нельзя потом вызвать garbage collector и удалить оставшиеся объекты?
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064634
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
ну да. нельзя потом вызвать garbage collector
чей?
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064636
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
jenya7
пропущено...

я запускаю скажем 10-20 консольных програм. я могу потом вызвать garbage collector и удалить оставшиеся объекты если есть такие?

Принудительная сборка мусора GC.Collect()

Но по-хорошему надо в своем классе прописывать интерфейс IDisposable и использовать оператор using


но это в данной программе. а как мне собрать мусор других запущенных програм?
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064637
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
jenya7
ну да. нельзя потом вызвать garbage collector
чей?

а что garbage collector вызывается на уровне бегущей програмы? я думал фреймворк умеет запускать его глобально и собирать весь мусор.
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064638
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
но это в данной программе. а как мне собрать мусор других запущенных програм?

Никак. Каждая собирает только у себя. Читай про IDisposable и using
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064641
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
jenya7
но это в данной программе. а как мне собрать мусор других запущенных програм?

Никак. Каждая собирает только у себя. Читай про IDisposable и using

печалька. тогда у меня проблема.
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064643
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
а что garbage collector вызывается на уровне бегущей програмы? я думал фреймворк умеет запускать его глобально и собирать весь мусор.
А с чего вдруг твоя консольная программа должна лезть и собирать мусор, скажем, в ASP.NET-сайтах, крутящихся на этой же машине? Не говоря о том, сколько времени займет такое действие. Логика?
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064645
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
печалька. тогда у меня проблема.
Что мешает убрать все ссылки и собрать мусор до Console.ReadKey?
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064646
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
Dima T
пропущено...

Никак. Каждая собирает только у себя. Читай про IDisposable и using

печалька. тогда у меня проблема.

Нет тут никаких проблем, читать будешь? IDisposable как раз для того и придумано чтобы освобождать ресурсы сразу как они стали ненужны, т.е. аналог деструктора в С++. Тут подробнее .

Если ты это реализуешь как положено, то во всех твоих прогах ресурсы будут освобождаться не дожидаясь сборки мусора.
...
Рейтинг: 0 / 0
Запуск консольной програмы
    #40064648
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
jenya7
печалька. тогда у меня проблема.
Что мешает убрать все ссылки и собрать мусор до Console.ReadKey?

в том то и дело что из за кривизны dll мне как раз нужно чтоб объекты оставались после прогона консоли. но когда мой движок прогонит весь сиквенс - в конце - я хочу удалить весь мусор.
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запуск консольной програмы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]