Usuário com melhor resposta
thread nova com intervalo de tempo

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
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
Todas as Respostas
-
-
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 -
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