Тихая просьба о помощи

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

ChainikVcube
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 08.11.2005 (Вт) 13:41

Тихая просьба о помощи

Сообщение ChainikVcube » 08.11.2005 (Вт) 14:00

Хотел я проект из Планировщика заданий запускать.
Но меня грубо прервали и сказали – хренушки.

Программа должна самомтоятельно запускаться (делать что предписано) а данные для запуска должны браться из таблицы Базы данных Access.

Т.е. как я понял Таймер и все сопутствующие причандалы.

Отсюда вопрос:
Может у кого есть «обрезок кода» или класс по этой теме, что бы посмотреть. А то я , как говорится, курсы то закончил а ... предидущая профессия – пулемётчик : )))
javascript:emoticon(':oops:')
Embarassed
В общем, принцип, как в «планировщике заданий»

Заранее благодарен

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 08.11.2005 (Вт) 17:38

Ничего не понял, можно разжевать?

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 08.11.2005 (Вт) 18:44

Есть программа, которая должна связываться с различными серверами, забирать и обрабатывать имеющуюся там информацию. IP Серверов, username, password (параметры для установки соединения) хранятся в Access.
Хотел запускать ее из «пранировщика заданий».
Допустим:
Программа должна сама запускаться
09.10.2005 в 09:00
еженедельно по Пн и Чв в 09:00
ежемесячно 15го и 30го в 01:00

А мне говорят «низя».
Сделай, говорят, все культурно, как программист (каковым я не являюсь).
Создай таблицу, где бы были столбцы «Ежедневно», «Еженедельно», «Ежемесячно», «Время», и что там еще нужно, привяжи ее к индексу опрашиваемого сервера.

Создай таймер, который бы поминутно сравнивал системное время с тем, которое в таблице Access. И, по наступлению нужного времени запускал бы процедуру опроса сервера и т.д. В зависимости от наступившего времени видно, какой это сервер должен быть опрошен и его параметры (по средствам SQL запроса).

С таймерами (как и со многим другим) я никогда не работал, поэтому смутно себе представляю, как вычисляется время и дату следующего по времени соединения. Оно ведь не указано явно как дата и время «09.10.2005 09:00», а стоит допустим в столбце «Время» - 09:00, а встолбце «Еженедельно» - 1, 4 (т.е. Пн и Чв).
Таблица выглядит примерно так:

SevverIndex | Время | День | ДеньНедели | ДеньМесяца | Интервал




И как теперь вычислить дату и время следующего по времени соединения?
If Date.Now = ? чему

И дата начала отсчета наверно нужна?
Какова логика алгоритма?
Короче, темный лес

Не знаю, доходчиво ли я объяснил. Самому трудно оценить.

Наилучшее,что можно сделать для объяснения, это открыть планировщик заданий, задеть ему что нибудь еженедельно по Пн и Чв. А потом подумать, как то же самое можно сделать при помощи таймера и таблицы Access.

В общем, мне нужно что нибудь из этой оперы. Примеры какие нибудь
Буду благодарен за любую помощь

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 08.11.2005 (Вт) 18:52

ну и нах ещё и БД приплетать, имхо неверный путь.
Чё акссес то? Давай Оракл сразу и кластером! Надо ж по взрослому!

Извините, всё, не кричу, просто помогать в неправильном решении как то....ну того...

Я б послал всех и юзал шедулер. (На самом деле и юзаю)))))
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 08.11.2005 (Вт) 19:05

Себас в своем стиле ))
Дописать в программу свой маленький шедулер. Что? Как сделать? Оракл и кластером (:

А бд здесь имхо лишняя.

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 09.11.2005 (Ср) 10:02

Так скажите тогда, какая есть альтернатива

Хотя не понимаю, что в этом неверного. Программа смотрит в Таблицу, не наступило ли время сеанса и по наступлению запускает процедуру.

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 09.11.2005 (Ср) 10:48

файл, можно использовать обычный текстовый файл, в который записать всю инфу

но зачем изобретать то, что уже есть? и что можно стянуть с инета?

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 09.11.2005 (Ср) 11:12

а есть пример где нибудь такого использования?

Мне нужно принцип понять

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 09.11.2005 (Ср) 11:17

понять принцып чего?
Открыл файл, прочитал, сравнил, все :)

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 09.11.2005 (Ср) 11:26

Господа, а можно вопрос?
Кто на разлогиненном компе будет в час ночи запускать бережно написанный exe с таймером?

По-моему, тут пахнет сервисом.
В принципе, в .NET есть классы, чтобы написать такой сервис. Правда, как это делается - я не знаю (пока :) )
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 09.11.2005 (Ср) 12:42

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


Ладно, оставим это.

Видно не судьба мне толково объяснить, чего хочу.

И другим голову морочить не хочется.

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 09.11.2005 (Ср) 14:33

Нет, ты уж погоди...
Ты объясняешь вполне понятно.

Чем отличается текстовый файл от БД мне, честно говоря, не очень понятно. Точнее, я бы предпочла все-таки хранить эти данный во всяком случае не в текстовом файле. Уж тогда хотя бы XML.

Теперь по поводу проблемы проверки времени.
Смотри класс DateTime.
DateTime today = DateTime.Now
int day = today.day - вернет число
int dweek = today.DayOfWeek - вернет номер дня в неделе.
Только здесь есть подстава, какой день считать первым - воскресенье или понедельник. Надо посмотреть, можно ли это задать (должно быть можно)

Также есть функции Hour, Minute

Чего тебе еще для счастья не хватает?
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 09.11.2005 (Ср) 16:44

По настоянию Rainbow

К сожалению выбирать не приходится. Сказали мне Таблица Access и все тут.
Хотя лично я не вижу в таблице Access ничего плохого (кроме того, что я не знаю как из нее программно нужную мне информацию получить : )))

DateTime - это для меня пока наименьшее из зол.
Там со временем можно дазобраться.

Для меня не понятен принцип получения данных из таблицы. Вернее не как запрос создать, а ....
(Тут бы самое время скриншотик с таблицей для наглядности встявить , да не занаю как). Кому интересно я могу на мыло выслать макет таблицы.

Хотя я в вверху уже показывал
Вот, мне дали такой вариант таблицы. Хотя можно делать любую, главное покрыть ею все возможные временные варианты.

SevverIndex | Тип | Время | Единожды | День(и)Недели | День(и)Месяца

Тип : 1- одноразово; 2 – помесячно, 3- понедельно, 4 ежедневно, 5 –почасово, 6 – поминутно.

А теперь мне непонятно, как я из таблицы, смогу получить дату и время следующего сеанса

If DateTime.Now = ЧЕМУ? Это же не поле со временем и датой. Надо ведь это значение сначало как то высчитать. И какой алгоритм этого вычисления.

Там стоит 1 и 4 в столбце «День(и)Недели», что означает Пн и Чт. Как их терерь преобразовать и сранить с DateTime.Now? .... ТЕМНЫЙ ЛЕС

Если бы в таблице стояли просто число и время, тогда понятно, по средствам SQL запроса выбираю ближайшую дату и вперед.

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 09.11.2005 (Ср) 17:01

Одноразово - сравниваешь Now c датой
Каждый 1, 4
<из запроса получили, что nDay = 1>
if DateTime.Day = nDay then
<запустить>
end if

Из DateTime ты сможешь выцепить все нужные данные - какая сейчас дата, какой день недели, какой час, какая минута...
Остается только удобно сделаьб табличку в базе, доставать оттуда данные и сравнивать с нужной частью сейчасного времени.

Единственное что, я бы порекомендовала данные о расписании доставать 1 раз при старте программы. А если расписание поменялось - перезапустите программу. Впрочем, это будет зависеть от того, насколько долго выполняются запросы и насколько часто надо проверять и запускать процесс обработки данных.
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 09.11.2005 (Ср) 17:20

Rainbow писал(а):<из запроса получили, что nDay = 1>


???

Можно тебе экселевскую таблицу куда нибудь сбросить?
Что бы нагляднее было, а то мне кажется ты ее не так как я представляешь.

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 09.11.2005 (Ср) 17:21

Novichok$ писал(а):Если бы в таблице стояли просто число и время, тогда понятно, по средствам SQL запроса выбираю ближайшую дату и вперед

А, я поняла, что тебе не понятно. Тут тебе поможет тот самый таймер - класс Timer. Здесь пример - как раз то, что тебе надо.
http://msdn.microsoft.com/library/defau ... stopic.asp
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 09.11.2005 (Ср) 19:49

Rainbow писал(а):Господа, а можно вопрос?
Кто на разлогиненном компе будет в час ночи запускать бережно написанный exe с таймером?

По-моему, тут пахнет сервисом.
В принципе, в .NET есть классы, чтобы написать такой сервис. Правда, как это делается - я не знаю (пока :) )


Назначенные задания!
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 09.11.2005 (Ср) 23:54

Ого, даже смысл поняла, неплохо для начала.
А ведь это старонемецкий, это не простой стих и ему больше 800 лет. Но уже другая тема.

По английски я читаю, только не книги, конечно, и не "простыни" с MSDN (а жаль). Так, в пределах нескольких предложений смысл пойму.

Писать программу за меня не надо. Мне наряду с результатом еще очень важно понимание, мне ведь потом с этим работать.

По поводу вопросов.
Они у меня пока толко к таблице.

Не укладываетяс в голове, как это все должно происходить.
Если просто дата и время , тогда понятно
OLEDB Adapter - запрос - получаю нужно поле с датой и временем - загоняю его в переменную - срасниваю с Data.now ->да - запускаю процедуру с нужными параметрами;
-> нет - смотреть снова.
Проще в этом случае было бы бы просто написать дату и время в таблице для каждого сеанса. А как быть тогда когда у меня этих серверов 100 и их опрашивать надо 4 раза в неделю, чтож мне 5000 записей вносить?

Поэтому мне и не понятно, как на основе моей таблицы создать алгоритм проверки даты и времени.
Я сейчас над эти думаю.

Тут опять же, надо таблицу мою видеть. Может я там что то некорректно сделал.
И алгоритм проверки, он на чем должен основываться на SQL запросе или можно как то по другому.

А не спросить ли народ БД форуме?

Класс твой по ссылке я сейчас "мучаю" (или он меня : )) )

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 10.11.2005 (Чт) 9:07

вставлю свои 2 цента...

Я бы не поленился а создал в БД, связанную с основной, таблицу, куда вносил бы данные о дате очередного назначенного сеанса.
Програмой считывал бы данные о назначенных сеансах и сравнивала их с текущей датой и временем,
если больше или равно, то коннектился,
по завершению удачного коннекта и операции обращался к основной таблице и переписыал дату на новый сеанс.

Можно по другому: выставлять флаги выполнено/не выполнено в таблице назначенных сеансов, тогда вообще прогу можно разделить на 2. Одна будет опрашивать БД и вносить время сеансов,
а другая только опрашивать таблицу сеансов и устанавливать коннект.

1 подход кажется проще, хотя мне сдается 2 - более верное решение
но это мое личное мнение...

Удачи! )
Max

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 10.11.2005 (Чт) 10:32

Спасибо, Макс за идею. Но, мне кажется, что вычисление даты следующего сеанса – это лишняя информационная нагрузка на базу, избыточные сведения. Ведь и по имеющимся данным можно вычислить, надо сейчас запускать или нет... К тому же, поскольку программа работает постоянно, то, если очень хочется, дату и время следующего сеанса можно вычислять и хранить в программе. Базе эти сведения ни к чему.


Novichok$, мне кажется, тебе еще очень нужно познакомится с основами объектно-ориентированного программирования. А то будешь плохо понимать примеры.
http://www.vbstreets.ru/Articles/66053.aspx

Да, Novichok$, какую базу будешь использовать – Access или SQLServer?

Теперь по поводу таблицы. Несколько данных в одной «ячейке» не хранят. 2 значения записывают в 2 разные строки. Показываю пример:

Тип : 1- одноразово; 2 – помесячно, 3- понедельно, 4 ежедневно, 5 –почасово, 6 – поминутно.

Код: Выделить всё
SevverIndex | Тип | Start Date                    | День Недели | День Месяца
1      1   25.02.05 02:00AM       NULL               NULL
1      4   26.02.05 02:00AM   NULL      NULL
2      2   26.02.05 02:00AM   NULL      25
2      3   26.02.05 02:00AM   1      NULL
2      3   26.02.05 02:00AM   4      NULL
3      5   26.02.05 02:00AM   NULL      NULL
4      6   26.02.05 02:00AM   NULL      NULL



В этой таблице видим следующую информацию:
Сервер 1 опрашивать один раз 25.02.05 02:00AM + ежедневно, начиная с 26.02.05 02:00AM (соответственно, в 2 часа ночи).
Сервер 2 опрашивать 25го числа каждого месяца, начиная с с 26.02.05 в 2 часа ночи + каждый понедельник и четверг в это же вермя.
Сервер 3 ежечасно, начиная с 26.02.05 02:00AM
Сервер 4 – поминутно, начиная с 26.02.05 02:00AM

Время и дату можно разделить на 2 отдельных колонки. День недели и День месяца можно, наоборот, объединить, но не хочется.

Вопрос: как быть, если хочется запускать в последний день месяца. Ведь последний бывает 28, 29, 30, 31. Нужна ли такая функциональность? Если да, можно использовать 0 для индикации «последний»
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 10.11.2005 (Чт) 10:35

Novichok$ писал(а):Класс твой по ссылке я сейчас "мучаю" (или он меня : )) )

Попробуй написать простенькое приложение, где таймер объявле в нашем модуле, и каждые 10 секунд выскакивает сообщение (или еще что-нибудь делается). Просто, чтобы понять, как это работает.[/quote]
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 10.11.2005 (Чт) 11:02

to Rainbow

Пытаюсь разобраться в примере из твоей ссылки (Class Timer)

вот в этом месте:
Код: Выделить всё
If MessageBox.Show("Continue running?", "Count is: " & alarmCounter, _
                            MessageBoxButtons.YesNo) = DialogResult.Yes


DialogResult не опознается

"Нельзя ссылаться на экземпляр объекта без явного указания на экземпляр класса ..."

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 10.11.2005 (Чт) 11:02

Rainbow писал(а):Спасибо, Макс за идею. Но, мне кажется, что вычисление даты следующего сеанса – это лишняя информационная нагрузка на базу, избыточные сведения. Ведь и по имеющимся данным можно вычислить, надо сейчас запускать или нет... К тому же, поскольку программа работает постоянно, то, если очень хочется, дату и время следующего сеанса можно вычислять и хранить в программе. Базе эти сведения ни к чему.

Далее - в порядке дикуссии
/просто интересно.../
Вопрос ресурсов, как мне кажется.
Если прога сидит резидентно,
то наверно есть все-таки смысл "нагрузить" БД, зато снизить нагрузку на процессор, ведь каждый раз прийдется делать вычисления, а запись не одна...
Зато можно хранить оперативно данные в ОЗУ.
Есть одно "НО" - КАКОЙ конкретно аксесс? Он достаточно критичен к количеству подключенных пользователей :(
а БД из которой берутся данные для коннекта может еще кем-то использоваться, а не только для конкретной задачи
/ведь кто-то вносит туда логины, как минимум/
Как я понял БД - "данная нам реальность", и не факт что у программиста есть шансы ее преобразовать и садминить.
Мысль хранить данные оперативно мне нравится,
но пропадает варант с работой проги, запускаемой шедуллером с определенной периодичностью.
Резидентная прога будет висеть постоянно, отъедая ресурсы...
а оно надо?

за сим, с искренними признаниями
в апсцалютном почтении. ;)))
Max

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 10.11.2005 (Чт) 11:41

To Rainbow

Твою ссылку я читал еще раньше, спасибо.
Ты мне ее уже присылала, и по моему, ты не читала мое тебе вчерашнее ЛС

БД - Access . С нагрузкрй на эту базу и с процессором проблем не будет.
Сначала там будет только 1 пользователь.

По поводу таблицы, а если мне каждые 15 мин опрашивать надо?
Может лучше "тип" убрать , а вместо него "интервал в минутах" добавить и "Единожды" + разделить дату и время?

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 10.11.2005 (Чт) 11:52

kroskros писал(а):то наверно есть все-таки смысл "нагрузить" БД, зато снизить нагрузку на процессор, ведь каждый раз прийдется делать вычисления, а запись не одна...

Самый длинный здесь процесс как раз доставания данных из базы. Вычислить - это быстро.

kroskros писал(а):Резидентная прога будет висеть постоянно, отъедая ресурсы...
а оно надо?

мне вообще кажется, что достать расписание нужно один раз и больше за ним не лазить. Может быть, я не права и перезапускать прогу критично. Novichok$, что скажешь?
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 10.11.2005 (Чт) 12:07

Пока что устроит и "неэкономный вариант". Предложенный мною вариант с ПЛАНИПРВЦИКОМ ЗАДАНИЙ был грубо отвергнут.
А как все просто получалось.....
Насоздавал для каждого сервера параметров, раз спланировал и вперед
Нет же ...хорошо
Пусть терерь имеют, что хотели

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 10.11.2005 (Чт) 14:55

Так чего там у тебя происходит? Поборол Таймер?
У меня, вроде, все опознается.

В крайнем случае, DialogResult лежит в System.Windows.Forms. Если ты создавал WindowsApplication, то должно было сработать.

Можно заменить на MsgBoxResult.Yes.

Но вообще, это все не принципиально. Словить сообщение от таймера получилось?
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 10.11.2005 (Чт) 15:42

Родскажи, как это теперь зациклить

Меняю статически в dMin = "33" на текущую минуту и в течении оной мне является MessageBox.Show(Date.Now.Minute)

Как только минута истекает таймер выпрыгивает из цикла.
А он мне еще нуден : )

Код: Выделить всё
Private Shared Timer1 As New System.Windows.Forms.Timer
    Private Shared exitFlag As Boolean = False



    Public Shared Sub TimerEventProcessor(ByVal myObject As Object, _
    ByVal myEventArgs As EventArgs)
        Timer1.Stop()
        Dim dMin As String
        dMin = "33"
        If Date.Now.Minute = dTag Then
            MessageBox.Show(Date.Now.Minute)
            Timer1.Enabled = True
        Else
            exitFlag = True
        End If
    End Sub

    Public Shared Sub Main()
       
        AddHandler Timer1.Tick, AddressOf TimerEventProcessor

        Timer1.Interval = 5000
        Timer1.Start()

        While exitFlag = False
            Application.DoEvents()
        End While

    End Sub

End Class

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 10.11.2005 (Чт) 15:47

Код: Выделить всё
dMin = "33"
        If Date.Now.Minute = dTag Then


там все dTag dMin стоит, это я для понятности в форум меня, а вэтом месте пропустил

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 10.11.2005 (Чт) 16:18

Как только минута истекает таймер выпрыгивает из цикла.

Ну, как написал - так и есть :)

Смотри:
AddHandler Timer1.Tick, AddressOf TimerEventProcessor - это ты сказал, что на Tick вызывать TimeEventProcessor процедуру.

Timer1.Interval = 5000
Timer1.Start()
Это ты установил тикать через каждые 5 секунд и запустил таймер

While exitFlag = False
Application.DoEvents()
End While
Это ты вошел в цикл, который закончится, как только ппеременная уровня класса станет равной true.

Теперь смотри свой обработчик:
Timer1.Stop() - остановить таймер

dMin = "33"
If Date.Now.Minute = dTag Then
MessageBox.Show(Date.Now.Minute)
Timer1.Enabled = True
Если сейчас минута 33, то показать msgbox и запустить таймер дальше

Else
exitFlag = True
End If
Иначе выставить переменную exitFlag в true.

То есть когда минута кончается, ты входишь в эту последнюю ветку, присваиваешь true, выходишь из обработчика и попадаешь на следующий цикл цикла while. Там он проверяет, то переменная не равно False и заканчивает работу программы.


Вопрос: надо тебе окончание программы вообще или она вечно висеть будет? Надо придумать, как ее останавливать.

Чтобы зациклить навечно:
Код: Выделить всё
        While True 'exitFlag = False
            Application.DoEvents()
        End While


В обработчике оставь только MessageBox.Show(Date.Now.Minute) и наслаждайся сообщениями.
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

След.

Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 43

    TopList