Как я могу передать объект таймера в функцию? - PullRequest
1 голос
/ 11 октября 2019

У меня есть таймер на каждой форме Windows моего проекта в VB. Сеть под названием «таймер», и он работает свойство У меня есть успешный код использования таймера, но я думаю, что лучше избегать всех рутинных и повторяющихся кодов в событии таймера (тик) каждой формы

Как я могу передатьсвойства таймера для функции в моем модуле. Вот мой основной код, написанный в моей форме

Private Sub timer1_tick (ByVal Sender As Object , ByVal e As EventArgs) Handles Timer1.Tick
    Static Second As Integer
    Second +=1
    If second >= 4 Then
          Timer1.Stop() 
           Lbl_Save.Visible = False
           Second = 1
    End If
End sub

Private Sub btn_Save_Click(ByVal Sender As Object , ByVal e As EventArgs) Handles btn_Save. Click
    Timer1.Interval = 300
    Timer1.Start() 
End Sub

===========================

Процедуры, которые я написал в моей ошибке (Setting_Module)

Public Sub Get_Timer(ByRef form_Name As Form) 
   Static Second As Integer
    Second +=1
    If second >= 4 Then
        formName.Controls("Timer1").Stop() Error
        formName.Controls(" Lbl_Save"). Visible = False
        Second = 1
    End If
End Sub

Компилятор выдает мне ошибку, поскольку не может принять (свойство: Stop)

У любого есть идея получше, я был бы ему очень благодарен

1 Ответ

0 голосов
/ 11 октября 2019

Вы должны использовать Microsoft Reactive Framework (также известный как Rx) - NuGet System.Reactive.Windows.Forms и добавить using System.Reactive.Linq; - тогда вы можете сделать это:

Private Sub btn_Save_Click(ByVal Sender As Object, ByVal e As EventArgs) Handles btn_Save.Click

    Lbl_Save.Visible = True

    Observable.
        Timer(TimeSpan.FromSeconds(4.0)). 
        ObserveOn(Me).
        Subscribe(Sub(x) Lbl_Save.Visible = False)
End Sub

Тогда вы вообще не копаетесь с таймерами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...