none
thread nova com intervalo de tempo RRS feed

  • Pergunta

  • Ola ! , 

    queria saber se tem um jeito de fazer uma thread executar o código de tempo em tempo, 

    sem usar o Timer, 

    no programa estou executando uma nova thread , e esta nova thread eu gostaria que executasse determinado codigo de tempo em tempo 

    se alguem tiver alguma dica sou grato

    apenas uma dica , ou methodo ja ajuda mt ^^ vlw pessoal



    AleSaggiorato

    terça-feira, 15 de janeiro de 2013 22:20

Respostas

  • este seu código ate serviria , mas a intenção minha não é dar um sleep na thread 

    o código que ate intaum eu havia feito não estava errado , eu é que estava inserindo dados para serem executados na thread principal - por isso gerava o congelamento da tela por segundos , agora os dados estao na thread certa 

    meritos a: Herbert Lausmann que viu o erro e apontou onde devia ser feito : 

    segue o codigo abaixo

    Imports System.Net.NetworkInformation
    Imports System.Threading
    Public Class Form1
        Dim time As Threading.Timer
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            time = New Timer(New TimerCallback(AddressOf MyCallBack), Nothing, TimeSpan.FromMilliseconds(0), TimeSpan.FromMilliseconds(1000))
        End Sub
        Dim Answer As Integer
        Private Sub MyCallBack()
            Dim png As New Ping
            Dim pngr As PingReply
            Try
                pngr = png.Send("www.google.com.br")
                Answer = pngr.RoundtripTime
            Catch ex As Exception
                Answer = -1
            End Try

            PictureBox1.BeginInvoke(New Action(AddressOf AddItem))
        End Sub

        Private Sub AddItem()
            If Answer < 0 Then
                PictureBox1.Image = My.Resources.Net_0
            ElseIf Answer > 0 And Answer <= 100 Then
                PictureBox1.Image = My.Resources.Net_5
            ElseIf Answer > 100 And Answer <= 200 Then
                PictureBox1.Image = My.Resources.Net_4
            ElseIf Answer > 200 And Answer <= 300 Then
                PictureBox1.Image = My.Resources.Net_3
            ElseIf Answer > 300 And Answer <= 500 Then
                PictureBox1.Image = My.Resources.Net_2
            ElseIf Answer > 500 Then
                PictureBox1.Image = My.Resources.Net_1
            End If
        End Sub


    End Class

    vlw a todos ;) 


    AleSaggiorato

    • Marcado como Resposta AleSaggiorato quinta-feira, 17 de janeiro de 2013 19:35
    quinta-feira, 17 de janeiro de 2013 19:35

Todas as Respostas

  • Ola Ale.

    Não tem como fazer com evento?


    If was useful mark as answered. Mariano, Paulo T. C.

    quinta-feira, 17 de janeiro de 2013 14:37
  • você pode tentar usa o System.Threading.Thread.Sleep ( tempoEmMiliSegundos );


    bool Running;
    
    Running = true;
    
    while ( Running )
    {
         // O uso do running é exclusivo para quando você quizer parar a execução
    
         Running = MeuMetodo();
    
         //Pausa o tempo de 1 em 1 segundo
         Thread.Sleep( 1 * 1000); 
    } 
    
    //Caso queira usar chamadas assícronas instancie em uma thread a parte
    http://msdn.microsoft.com/en-us/library/d00bd51t.aspx
    quinta-feira, 17 de janeiro de 2013 16:01
  • este seu código ate serviria , mas a intenção minha não é dar um sleep na thread 

    o código que ate intaum eu havia feito não estava errado , eu é que estava inserindo dados para serem executados na thread principal - por isso gerava o congelamento da tela por segundos , agora os dados estao na thread certa 

    meritos a: Herbert Lausmann que viu o erro e apontou onde devia ser feito : 

    segue o codigo abaixo

    Imports System.Net.NetworkInformation
    Imports System.Threading
    Public Class Form1
        Dim time As Threading.Timer
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            time = New Timer(New TimerCallback(AddressOf MyCallBack), Nothing, TimeSpan.FromMilliseconds(0), TimeSpan.FromMilliseconds(1000))
        End Sub
        Dim Answer As Integer
        Private Sub MyCallBack()
            Dim png As New Ping
            Dim pngr As PingReply
            Try
                pngr = png.Send("www.google.com.br")
                Answer = pngr.RoundtripTime
            Catch ex As Exception
                Answer = -1
            End Try

            PictureBox1.BeginInvoke(New Action(AddressOf AddItem))
        End Sub

        Private Sub AddItem()
            If Answer < 0 Then
                PictureBox1.Image = My.Resources.Net_0
            ElseIf Answer > 0 And Answer <= 100 Then
                PictureBox1.Image = My.Resources.Net_5
            ElseIf Answer > 100 And Answer <= 200 Then
                PictureBox1.Image = My.Resources.Net_4
            ElseIf Answer > 200 And Answer <= 300 Then
                PictureBox1.Image = My.Resources.Net_3
            ElseIf Answer > 300 And Answer <= 500 Then
                PictureBox1.Image = My.Resources.Net_2
            ElseIf Answer > 500 Then
                PictureBox1.Image = My.Resources.Net_1
            End If
        End Sub


    End Class

    vlw a todos ;) 


    AleSaggiorato

    • Marcado como Resposta AleSaggiorato quinta-feira, 17 de janeiro de 2013 19:35
    quinta-feira, 17 de janeiro de 2013 19:35