none
Реализация задержки в процессе работы таймера. В чем ошибка? RRS feed

  • Вопрос

  • Задумка была чтобы в окошке формы через определенный интервал (например через 6 минут) на определенное время (допустим на 2-3 минуты) выводилось изображение словарного слова.

    Проблема в том что при значении sleep больше чем 2000 в процессе выполнения программы просматриваются только 1 или 2 слова (при 3000 показывается 2 слова а выше только 1). Уже перепробовала разные варианты, подскажите в чем ошибка?

    Программный код:

     

    Public Class Form2
    
    
    
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            Me.TransparencyKey = BackColor
    
            Timer1.Enabled = True
    
    
    
        End Sub
    
    
    
        Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    
    
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    
            Dim i As Integer
    
            Timer1.Interval = 6000
    
            PictureBox1.Visible = False
    
            For i = 1 To 5
    
                PictureBox1.Visible = True
    
                PictureBox1.Image = System.Drawing.Image.FromFile("c:\images\0" & i & ".gif")
    
                Application.DoEvents()
    
                ' Sleep(6000) ' ожидание 
    
                System.Threading.Thread.Sleep(2000)
    
            Next
    
    
    
        End Sub
    
    End Class
    
    
    • Перемещено SachinW 1 октября 2010 г. 21:48 MSDN Forums Consolidation (От:Начинающие разработчики)
    11 января 2010 г. 16:21

Ответы

  • Может быть так (правд использовал два таймера):

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.TransparencyKey = BackColor
            PictureBox1.Visible = False
            Timer1.Interval = 6000
            Timer2.Interval = 2000
            Timer1.Start()
        End Sub
    
        Dim i As Integer = 1
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Timer1.Stop()
            Timer2.Start()
            PictureBox1.Visible = True
            PictureBox1.Image = System.Drawing.Image.FromFile("c:\images\0" & i & ".gif")
        End Sub
    
        Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
            Timer2.Stop()
            i += 1
            If (i <= 5) Then
                Timer1.Start()
            End If
            PictureBox1.Visible = False
        End Sub
    End Class

    А ошибка в том, что картинки не успевает все показаться, как снова вызывается событие таймера. Надо было его сразу остановить (Timer1.Stop() в Timer1_Tick)

    • Помечено в качестве ответа I.Vorontsov 12 января 2010 г. 7:04
    11 января 2010 г. 17:11

Все ответы

  • Может быть так (правд использовал два таймера):

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.TransparencyKey = BackColor
            PictureBox1.Visible = False
            Timer1.Interval = 6000
            Timer2.Interval = 2000
            Timer1.Start()
        End Sub
    
        Dim i As Integer = 1
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Timer1.Stop()
            Timer2.Start()
            PictureBox1.Visible = True
            PictureBox1.Image = System.Drawing.Image.FromFile("c:\images\0" & i & ".gif")
        End Sub
    
        Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
            Timer2.Stop()
            i += 1
            If (i <= 5) Then
                Timer1.Start()
            End If
            PictureBox1.Visible = False
        End Sub
    End Class

    А ошибка в том, что картинки не успевает все показаться, как снова вызывается событие таймера. Надо было его сразу остановить (Timer1.Stop() в Timer1_Tick)

    • Помечено в качестве ответа I.Vorontsov 12 января 2010 г. 7:04
    11 января 2010 г. 17:11
  • Огромное спасибо, об этом варианте чего то я и не подумала :-)
    12 января 2010 г. 2:54