|
0 / 0 / 1
Регистрация: 26.09.2017
Сообщений: 12
|
||||||
.NET 2.x Запустить внешнюю программу и дождаться ее завершения27.09.2017, 08:20. Показов 6834. Ответов 19
Метки нет (Все метки)
Доброго времени суток.
Я новичек в программировании и тем более в C#. Очень нужна помощь. Форма с кнопками, textbox, chekedlistbox. Основной код написан на .NET 2.0. Нужна совместимость с ХР (желательно без дополнительной установки новой .NET 4.x. ). Суть проблеммы: Нужно запустить внешнюю программу нажатием кнопки и дожнаться ее завершения, НО без "зависания" форми. 1) если делаю через waitforexit - виндовс начинает видеть как "зависшую" - либо пользователь, либо "настроенная" система может ликвидировать процесс 2) если делаю через таймер или sleep - съедает проц или память (или в одном варианте ведет себя как waitforexit уже не помню). Наверное не правильно код пишу не имея достаточно знаний. Прошу вашей помощи. Никак не смог разобраться с async и await. Добавлено через 10 часов 42 минуты
0
|
||||||
| 27.09.2017, 08:20 | |
|
Ответы с готовыми решениями:
19
Как правильно дождаться завершения потока?
|
|
Администратор
|
|||||||
| 27.09.2017, 13:25 | |||||||
|
RomeoRGRR, нужно делать запуск из отдельного потока и там вызывать WaitForExit. Или запускай из основного и подписывайся на событие Exited.
0
|
|||||||
|
0 / 0 / 1
Регистрация: 26.09.2017
Сообщений: 12
|
|
| 27.09.2017, 20:07 [ТС] | |
|
1) какраз тут и роблемма, не могу разобраться с потоками и делегатами
2) Конкретно в моем случае ето хорошо что моя программа будет ждать завершения другого такого же процесса (тоесть второй экземляр внешней программы). 3) спасибо, не додумался к такому простому коду, пробовал намного сложнее ![]() но не могу понять, почему пока мы в етом цикле одно ядро полностью загружено.. почему так? есть способ снизить загрузку?
0
|
|
|
Администратор
|
||
| 27.09.2017, 20:20 | ||
|
0
|
||
|
0 / 0 / 1
Регистрация: 26.09.2017
Сообщений: 12
|
||||||
| 27.09.2017, 20:38 [ТС] | ||||||
|
Подписался (не уверен, что правильно), но одно ядро все равно загружено. Что-то не так сделал? Или Вы имели ввиду что тут только другой поток поможет?
0
|
||||||
|
Администратор
|
|
| 27.09.2017, 21:11 | |
|
RomeoRGRR, зачем здесь снова цикл? Делай нужные действия в обработчике события Exited.
0
|
|
|
0 / 0 / 1
Регистрация: 26.09.2017
Сообщений: 12
|
|||||||||||||
| 28.09.2017, 17:45 [ТС] | |||||||||||||
|
в 7 строке сделал та:
Попробовал с потоком, но не могу понять как ожидать завершения потока
Добавлено через 19 часов 58 минут
0
|
|||||||||||||
|
Администратор
|
|||||||
| 29.09.2017, 15:42 | |||||||
Сообщение было отмечено RomeoRGRR как решение
Решение
2
|
|||||||
|
0 / 0 / 1
Регистрация: 26.09.2017
Сообщений: 12
|
|
| 30.09.2017, 22:36 [ТС] | |
|
Перед запуском внешнего процесса я отключал сетевые адаптеры, чтоб внешняя программа не смогла попасть в интернет. После завершения внешнего процесса мне нужно обратно включить сетевые адаптеры. Правильно понимаю, код, который обратно включает адаптеры, нужно вставить на место 10 строки (Ваш последний ответ) и он сработает после завершения внешней программы?
0
|
|
|
Администратор
|
|
| 30.09.2017, 22:47 | |
|
0
|
|
|
0 / 0 / 1
Регистрация: 26.09.2017
Сообщений: 12
|
||||||
| 01.10.2017, 20:09 [ТС] | ||||||
|
Большое спасибо!
Адаптеры включаються, но не могу обратно активировать элементы формы (перед запуском внешнего процеса я их деактивировал):
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll Additional information: Cross-thread operation not valid: Control 'ExitBut' accessed from a thread other than the thread it was created on. Так понимаю, что дочерний процес не может работать с родительской формой. Как правильно решить проблему? В голову приходит мысль о перехвате етого исключения и, в случае его присутствия, активировать элементы формы. Добавлено через 34 минуты Кажеться нашел почти такую же проблему, но не могу сделать для своего кода. Создание и обработка события Process Exited
0
|
||||||
|
Администратор
|
||||||
| 01.10.2017, 23:11 | ||||||
|
RomeoRGRR,
1
|
||||||
|
0 / 0 / 1
Регистрация: 26.09.2017
Сообщений: 12
|
||||||
| 02.10.2017, 15:13 [ТС] | ||||||
|
вставлял код и в тело обработчика Exited, и в тело RunBut_Click, и в тело Form1 и все равно выдает ошибку
CS0305 Using the generic type 'Action<T>' requires 1 type arguments Нашел, что Action доступно с .NET 3.5, нашел способ обойти проблему, но не уверен нет ли лучшено способа. Вставил в конец тела обработчика Exited. Кажеться все хорошо.
0
|
||||||
|
Администратор
|
|
| 02.10.2017, 15:15 | |
|
RomeoRGRR, это нормальный способ
0
|
|
|
0 / 0 / 1
Регистрация: 26.09.2017
Сообщений: 12
|
||||||
| 02.10.2017, 16:17 [ТС] | ||||||
|
Будет ли код, написан на .NET 2 работать на windows 8 - 10 или нужно делать проверку версии .net и под каждую писать соответстующий код? (помню у 8 и 8.1 иногда надо было включать .net 3.5 в системных компонентах)
И еще один вопрос, но наверное это другая тема уже. Внешнюю программу удаеться запустить только через ярлык, который был создан при ее установке. Напрямую через .exe именно она запускаеться но что-то не так в ней срабатывает и она выключаеться. Создавал ярлык таким кодом
Соответственно вопрос: 1) как запускать внешнюю програму с теми же атрибутами? (пока скопировал оригинальный ярлык и редактируюю в нем путь) 2) очень желательно не использовать IWshRuntimeLibrary (хочеться сделать одну .exe без копирования Interop.IWshRuntimeLibrary.dll. Создание ярлыка допустимо (хочу без ярлыка), но в таком случае мне сначало нужно достать все параметры с оригинального ярлыка). не смог разобраться: Создать ярлык к сторонней программе
0
|
||||||
|
Администратор
|
||||||||||||||
| 02.10.2017, 16:52 | ||||||||||||||
1
|
||||||||||||||
|
0 / 0 / 1
Регистрация: 26.09.2017
Сообщений: 12
|
||||||||
| 04.10.2017, 22:29 [ТС] | ||||||||
Если не трудно, можете еще подсказать в моей ситуации как создавать ярлык к внешней программе (или можно просто скопировать код отсюда: Создать ярлык к сторонней программе ? Но там есть лишний код для аргументов, как я понял)? Добавлено через 17 минут забыл добавить, что создать ярлык без использования возле моей программы библиотеки Interop.IWshRuntimeLibrary.dll
0
|
||||||||
|
Администратор
|
|
| 04.10.2017, 22:33 | |
|
0
|
|
|
0 / 0 / 1
Регистрация: 26.09.2017
Сообщений: 12
|
||||||
| 04.10.2017, 23:13 [ТС] | ||||||
|
Большое спасибо! Попробовал указать ProcessStartInfo.WorkingDirectory и запустить сам ехе-ник и запустилась!! ура!
Как хорошо, что есть куда обратится за помощю и тебе помогут... Спасибо! Если выбрать лучший ответ, тема будет считаться закрытой, верно? Не уверен, какой ответ выбрать лучшим (или не принципиально?) Добавлено через 10 минут а для общего развития, можете подсказать как создать ярлык в моём случае без использования Interop.IWshRuntimeLibrary.dll ?
0
|
||||||
|
Администратор
|
||||||||||||||||
| 05.10.2017, 00:01 | ||||||||||||||||
немного COM Interop кода необходимого для кода выше
1
|
||||||||||||||||
| 05.10.2017, 00:01 | |
|
Помогаю со студенческими работами здесь
20
Правильно создать пул потоков, запустить эти потоки одновременно и дождаться их завершения Из access запустить внешнюю программу
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|