Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Timer на уровне модуля  [new]
Лори
Member

Откуда:
Сообщений: 1256
Приложение на VB.NET состоит из нескольких форм.
Нужно, чтобы в какой-то момент времени, приложение заканчивало свою работу. Например, при запуске, включался бы таймер, и каждый час проверял флажок в текстовом файле: если там "1", то продолжает работать, если "0"- то завершает работу.
Приложение запускается из Sub Main в Module1, т.е. формы запускаются через Application.Run(FormХ)
Если создать Timer в Module1, то при передаче управления формам, этот таймер перестает работать, и запускается только при закрытии форм (передаче управления обратно в модуль). Можно ли сделать так, чтобы таймер продолжал свою работу?

P.S. Создавать таймеры в каждой форме не подходит, т.к. количество форм достаточно велико.
12 сен 18, 01:24    [21671639]     Ответить | Цитировать Сообщить модератору
 Re: Timer на уровне модуля  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20319
В .NET три вида таймеров, выбери подходящий.
https://yandex.ru/search/?text=timers in .net
12 сен 18, 04:10    [21671654]     Ответить | Цитировать Сообщить модератору
 Re: Timer на уровне модуля  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Лори,
В главной форме должен работать всегда.
12 сен 18, 07:14    [21671677]     Ответить | Цитировать Сообщить модератору
 Re: Timer на уровне модуля  [new]
Лори
Member

Откуда:
Сообщений: 1256
Petro123
Лори,
В главной форме должен работать всегда.

Тоже так думал. Вот примерчик, где таймер не работает. Если закомментить Application.Run(Form1), то он работает.
Module Module1
    WithEvents Timer1 As New Timers.Timer
    Dim exitFlag As Boolean = False
    Private Sub Timer1_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed

        'Если в файле flag.txt "0", то приложение прекращает работу
        Dim aFile As New IO.FileStream(Application.StartupPath & "\flag.txt", IO.FileMode.Open)
        Dim srSettingsIni As New IO.StreamReader(aFile, System.Text.Encoding.Default)

        If srSettingsIni.ReadLine() = "0" Then
            Timer1.Stop()
            exitFlag = True
        End If

        srSettingsIni.Close()
    End Sub

    Sub Main()
        Application.Run(Form1)

        Timer1.Interval = 5000
        Timer1.Start()

        While exitFlag = False
            Application.DoEvents()
        End While

        MsgBox("Завершение Main")
    End Sub
End Module
12 сен 18, 09:32    [21671752]     Ответить | Цитировать Сообщить модератору
 Re: Timer на уровне модуля  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20319
Так ты СНАЧАЛА таймер запусти, а потом уже форму. У тебя же управление не возвращается, таймер не программируется.
12 сен 18, 09:43    [21671759]     Ответить | Цитировать Сообщить модератору
 Re: Timer на уровне модуля  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20319
Лори
        While exitFlag = False
            Application.DoEvents()
        End While
Дикая жесть.
12 сен 18, 09:44    [21671761]     Ответить | Цитировать Сообщить модератору
 Re: Timer на уровне модуля  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26479
Лори,

запустите таймер до Application.Run, вместо exitFlag = true используйте Application.Exit.
12 сен 18, 09:45    [21671764]     Ответить | Цитировать Сообщить модератору
 Re: Timer на уровне модуля  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4798
Shocker.Pro
В .NET три вида таймеров, выбери подходящий.
https://yandex.ru/search/?text=timers in .net

Тогда уж лучшн так: http://krishna-paudel.blogspot.com/2009/07/comparing-timer-classes-in-net.html
Petro123
Лори,
В главной форме должен работать всегда.

Зависит от класса таймера.
12 сен 18, 10:10    [21671789]     Ответить | Цитировать Сообщить модератору
 Re: Timer на уровне модуля  [new]
Лори
Member

Откуда:
Сообщений: 1256
Запускаю таймер до Application.Run, все то же самое (
12 сен 18, 10:15    [21671794]     Ответить | Цитировать Сообщить модератору
 Re: Timer на уровне модуля  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20319
Лори
Запускаю таймер до Application.Run, все то же самое (
Поставь точку останова в Timer1_Elapsed
12 сен 18, 10:45    [21671826]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить