|
Как организовать незакрытие "Консольного приложения", чтоб main() не выходила
|
|||
---|---|---|---|
#18+
Т.е. 1) запустилась консоль/ запустилась main() 2) запустились дела 3) зарядились события 4) события ловятся и пишут в консоль Console.WriteLine("Я тут. Дела идут.") Как грамотно сделать в main(): 1) чтоб консоль не закрылась пока "дела идут". 2) чтоб она закрылась, когда "дела сделаны". (сигнал приходит из заключительного события) 3) чтоб она закрылась нажатием "горячей клавиши", когда надоело "смотреть за делами" (сигнал приходит от юзера) Примитивно Код: vbnet 1. 2. 3.
Чревато "загрузкой процессора" Можно еще засунуть Код: vbnet 1.
(типа нажал Enter - вышел) Конкретно: создаем задание факса для Windows Fax Server и его тут же и отслеживаем через события objFaxServer, надоело отслеживать, "стукнули" по консоли и вышли (оно от этого выполняться не перестанет). (Через GUI отслеживается пока открыта форма, теперь надо сделать скупо через консоль, цикл или таймер как таковой не нужен, все через события в модуле, но надо чтоб main не завершалась) По хорошему еще б обратное управление процессом через консоль Команды Cancel/Delete, Pause, Resume (в любой момент). ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 23:34 |
|
Как организовать незакрытие "Консольного приложения", чтоб main() не выходила
|
|||
---|---|---|---|
#18+
Дмитрий77, Запускаешь задачу в потоке, добавляешь в Continuation принудительный выход из программы. Пока задача выполняется работаешь с консолью стандартным образом, прокидываешь внутрь задачи команды через события. Вроде всё очевидно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2019, 01:52 |
|
Как организовать незакрытие "Консольного приложения", чтоб main() не выходила
|
|||
---|---|---|---|
#18+
Дмитрий77, вот простейший пример: Код: 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2019, 02:31 |
|
Как организовать незакрытие "Консольного приложения", чтоб main() не выходила
|
|||
---|---|---|---|
#18+
hVostt, сложно что-то. И Task-и кажется отсутствуют в .Net 2.0 (у меня дублированные exe Net 4.5/2.0) У меня "постановка/запуск задачи" и инициализация COM-событий делается в потоке Main() Решение нарыл. Код: vbnet 1.
(ну я так понял это эквивалент стандартной петли обработки сообщений, которая делается в C++, процессор не "грузится") События сыплются, c Console.WriteLine("Я тут. Дела идут.") проблем нет. Консоль не закрывается. Для автозавершения и корректного продвижения в конец Main() из соответствующих событий достаточно сделать Код: vbnet 1. 2. 3.
Уж не знаю чего правильнее, но подозреваю для моего случая правилен любой вариант. Типа так Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Остается вопрос с "управлением", уж не знаю можно ли при такой примитивной "конструкции", но он изначально в моем "техзадании" не стоял (подумалось а че бы нет). Основная задача "консоли", именно удержать процесс в напр. автоматическом последовательном режиме бат-файла. А для управления уже сделан GUI-режим с кнопочками и свистелками (аж с найтивным Ribbon UI, рука набита). ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2019, 04:05 |
|
Как организовать незакрытие "Консольного приложения", чтоб main() не выходила
|
|||
---|---|---|---|
#18+
Дмитрий77сложно что-то. И Task-и кажется отсутствуют в .Net 2.0 (у меня дублированные exe Net 4.5/2.0) .NET 4.0 поддерживается даже на XP https://docs.microsoft.com/ru-ru/dotnet/framework/get-started/system-requirements версии 2.0 уже 15 лет почти стукнуло. зачем страдать? ) Дмитрий77Остается вопрос с "управлением", уж не знаю можно ли при такой примитивной "конструкции", Чёт всё как обычно, нормальные адекватные решения тебе не подходят... Как прооперировать пациента молотком из зубилом левой ногой, удерживая протекающую крышу. Видимо на любителя. Для управления я уже привёл код, даже если без тасков и в 2.0 есть BackgorundWorker и ThreadPool, https://docs.microsoft.com/ru-ru/dotnet/api/system.threading.manualresetevent?view=netframework-2.0сигнальное событие, которое в моём примере всё также актуально и для старого фреймворка. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2019, 01:09 |
|
|
start [/forum/topic.php?fid=20&fpage=19&tid=1398920]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 145ms |
0 / 0 |