1 / 1 / 0
Регистрация: 28.02.2014
Сообщений: 43
|
|||||||||||
1 | |||||||||||
.NET 4.x Как из одной процедуры прервать выполнение другой?14.04.2014, 20:12. Показов 2954. Ответов 10
Метки нет (Все метки)
Собственно проблема возникла в следующем. Есть такая конструкция:
0
|
14.04.2014, 20:12 | |
Ответы с готовыми решениями:
10
В случае ошибки не прервать выполнение программы, а перейти к другой процедуре или к другому месту той же процедуры Как прервать выполнение процедуры? Как прервать выполнение процедуры? Как прервать выполнение процедуры на диалоге |
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
|
|
14.04.2014, 20:32 | 2 |
Есть пара вариантов.
1) Завести булеву переменную глобально, в таймере устанавливать ей значение, если что-то пошло не так, например, в False. В кнопке в определенном месте проверять, чему равна переменная, если все ок, идем дальше, если переменная стала False, то Exit Sub 2) Выполнять все проверки в одном методе. Варианта вызвать Exit Sub для другого метода не знаю. Еще хотел бы напомнить про пользовательские функции, в которых что-то происходит, а они возвращают какие-то значения. Вариант 3) Продумывать логику кода до того, как начал его писать, чтобы потом такие ситуации не заставляли искать решение, тем самым убивая полезное время
2
|
1 / 1 / 0
Регистрация: 28.02.2014
Сообщений: 43
|
|
15.04.2014, 17:45 [ТС] | 3 |
написал с использованием переменной, но возник другой вопрос:
как дождаться момента, когда Timer1 остановится, что бы программа не выполнялась до тех пор, пока таймер не выключится в своем событии Tick
0
|
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
|
|
15.04.2014, 18:00 | 4 |
Таймер "тикает" в отдельном потоке вроде как, поэтому на переменных при такой задаче далеко не уедешь.
Могу посоветовать использовать многопоточность, но лучше подождать, когда ответят что-то более толковое
0
|
1 / 1 / 0
Регистрация: 28.02.2014
Сообщений: 43
|
|
15.04.2014, 18:42 [ТС] | 5 |
Я поставил таймер что бы периодически делать опрос директории на компьютере на наличие нужного файла, если файл есть, то остановить таймер и продолжить основную программу. Может есть способы по другому это реализовать?
0
|
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
|
|
15.04.2014, 18:57 | 6 |
Тут все не так однозначно, как кажется.
Вот Вы мониторите папку на появление файла. Имя этого файла известно? Что о нем вообще известно? Сколько времени занимает поиск? Второй вопрос - что происходит в коде до того, как таймер начинает искать файл, что после и что в случае, если файл будет найден?
0
|
1 / 1 / 0
Регистрация: 28.02.2014
Сообщений: 43
|
||||||
15.04.2014, 19:45 [ТС] | 7 | |||||
Имя известно, ищу так
Перед поиском файла запускается внешнее приложением, результатом работы которого и будет появление файла. В общем как-то так
0
|
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
|
||||||
15.04.2014, 19:50 | 8 | |||||
Поиск в таком случае не нужен.
Достаточно проверять наличие файла
Так поместите в таймер весь код вместе с проверкой файла, его парсингом и выполнением с полученными данными нужных действий. Не думаю, что стоит это распределять по разным методам
0
|
1 / 1 / 0
Регистрация: 28.02.2014
Сообщений: 43
|
||||||
15.04.2014, 20:06 [ТС] | 9 | |||||
Наверно я не так выразился, сформулирую конкретней суть вопроса. Допустим есть такой код:
В целом вот так: я запускаю внешнюю программу, жду когда она выдаст файл(это может затянуться до нескольких минут), проверяю устраивает ли меня этот файл, если устраивает останавливаю все процедуры, если не устраивает - повторяю цикл, т.е снова запускаю внешнюю программу и проверяю файл на выходе
0
|
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
|
||||||
15.04.2014, 20:20 | 10 | |||||
Вот я и спрашивал, что там - дальше, после таймера
В общем, я понял так: Идет выполнение какого-то кода до этого участка. Потом тут таймер начинает проверять файл и парсить. Если файла нет, то таймер должен так и крутиться, не давая программе выполняться дальше. Только нашел и распарсил - пошло дальше. Если так, то вот Вам демо. В кнопке что-то выполняется, потом надо ждать файл.
Если интерфейс приложения будет нужен во время ожидания файла, весь код кнопки надо будет поместить в метод и выполнить его в отдельном потоке.
0
|
55 / 55 / 5
Регистрация: 17.09.2012
Сообщений: 128
|
|
16.04.2014, 11:30 | 11 |
Сообщение было отмечено Памирыч как решение
Решение
для отслеживания момента появления нужного файла в заданной папке можно воспользоваться классом FileSystemWatcher
0
|
16.04.2014, 11:30 | |
16.04.2014, 11:30 | |
Помогаю со студенческими работами здесь
11
Как прервать выполнение процедуры или функции Прервать одну процедуру из другой процедуры Как повторить выполнение кода из одной процедуры в другую? Как задать зависимость одной процедуры от другой? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |