2015-04-11 2 views
0

Я получил функцию:Таймер не запускается второй раз

Private Sub UpdateSch() 
     Threading.Thread.Sleep(50) 
     Dim i As Integer = 1 
     While i = 1 
      Try 
       If DataGridView1.Rows.Count > 1 Then 
        DataGridView1.Rows.Clear() 
       End If 
       Using stream As System.IO.FileStream = System.IO.File.OpenRead("Z:\\SchData.txt") 
        Using reader As New System.IO.StreamReader(stream) 

         Dim line As String = reader.ReadLine() 

         While (line IsNot Nothing) 
          Dim columns = line.Split(";") 
          line = reader.ReadLine() 
          Dim index = Me.DataGridView1.Rows.Add() 
          Me.DataGridView1.Rows(index).SetValues(columns) 
         End While 

        End Using 
       End Using 
       Button88.Enabled = True 
       DataGridView1.CurrentCell = DataGridView1.Rows(rowIndex).Cells(colIndex) 
       i = 0 
      Catch ex As Exception 
       Threading.Thread.Sleep(50) 
      End Try 
     End While 

     'Check for local updating 
     If updatingSch = False Then 
      DataGridView1.Enabled = False 
      LockWarning1.Visible = True 
      lockVar1 = 0 
      LockTimer1.Start() 
     Else 
      updatingSch = False 
     End If 
    End Sub 

А потом у меня есть таймер:

Private Sub LockTimer1_Tick(sender As Object, e As EventArgs) Handles LockTimer1.Tick 
     LockWarning1.Visible = False 
     DataGridView1.Enabled = True 
     LockTimer1.Stop() 
    End Sub 

Функция updateSch вызывается в виде нагрузки и всякий раз, когда файл изменяется. Он блокирует DataGridView, запускает таймер, который работает в течение 10 секунд, а затем разблокирует Datagridview. Все это работает при загрузке, но когда оно вызывается снова, оно блокируется и никогда не разблокируется. Во второй раз таймер не запускается. (Я поставил точку останова на «LockTimer1.Start()», и он выполняется во второй раз, но после этого событие LockTimer_Tick не срабатывает)

+0

Вызов 'LockTimer1.Enabled = true' запустит таймер. Попробуйте вместо «LockTimer1.Start()« Мне повезло с этим. – OneFineDay

+0

Какой тип 'LockTimer1'? 'System.Windows.Forms.Timer' или' System.Timers.Timer' или ...? –

+0

@OneFineDay Я попытался использовать LockTimer1.Enabled = True и LockTimer1.Enabled = False вместо этого, но я получил те же результаты. –

ответ

2

Я нашел решение моей проблемы. Для жизни я не могу понять, почему мой предыдущий код не будет работать. То, что я смог получить, это System.Timers.Timer (вместо System.Windows.Forms.Timer). Мой код создания таймера выглядит следующим образом:

Dim LockTimer1 As New System.Timers.Timer() 
 
      LockTimer1.Interval = 10000 
 
      LockTimer1.AutoReset = False 'Run timer only once 
 
      LockTimer1.Start() 
 
      AddHandler LockTimer1.Elapsed, AddressOf LockTimer1_Tick
, а затем функцию LockTimer1_tick:

Private Sub LockTimer1_Tick(ByVal sender As Object, ByVal e As ElapsedEventArgs) 
 
     LockWarning1.Visible = False 
 
     DataGridView1.Enabled = True 
 
     Button88.Enabled = True 
 
     Button1.Enabled = True 
 
    End Sub

Смежные вопросы