ESPERAR UM TEMPO ENTRE UM LABEL.TEXT E OUTRO

DELPALMIS 09/08/2012 19:55:46
#407618
Bom pessoal com disse anteriomente aqui no forum. Eu criei um ping para pingar o MS dentre varios servidores. Porém Preciso que espere um tempo entre um ping e outro. Tentei usar a Sleep(). Mas só que ele espera o tempo correto mais ele exibi os dois resultados juntos.

Exemplo:
Eu queria que ele printasse na minha label assim.
Servidor 1: 189ms
Espere 3 segundoes e então
Servidor 2: 175ms

Ele está printando assim
Espera os 3 segundos e então
Servidor 1: 189ms
Servidor 2: 175ms

CODE:
        If rping0.Status <> IPStatus.Success Then
Label6.Text = snome(0) & [Ô]: [Ô] & [Ô]Sem Resposta[Ô]
Else
Label6.Text = snome(0) & [Ô]: [Ô] & rping0.RoundtripTime.ToString & [Ô] ms[Ô]
End If
Thread.Sleep(3000)

Dim rping1 As PingReply = pingar.Send(swip(1))
If rping0.Status <> IPStatus.Success Then
Label7.Text = snome(1) & [Ô]: [Ô] & [Ô]Sem Resposta[Ô]

Else
Label7.Text = snome(1) & [Ô]: [Ô] & rping1.RoundtripTime.ToString & [Ô] ms[Ô]
End If
JABA 09/08/2012 20:37:42
#407625
Você pode utilizar um controle Timer para isso:

http://www.macoratti.net/vbn_time.htm
http://www.macoratti.net/09/06/vb_emp1.htm

vlw
DELPALMIS 10/08/2012 12:46:22
#407677
Bom amigo... segui o exemplo do site do macoratti. Para compreender o sistema timer. Pois sou iniciante no assunto ainda. Segui o exemplo que ele citou na pagina.
Na hora de criar não recebo erro algum.
Porém na de testar a aplicação ele me retorna um erro. Nessa linha.
Label2.Text = e.SignalTime.ToString
  System.InvalidOperationException was unhandled by user code
Message=Cross-thread operation not valid: Control [ô]Label2[ô] accessed from a thread other than the thread it was created on.
Source=System.Windows.Forms
StackTrace:
at System.Windows.Forms.Control.get_Handle()
at System.Windows.Forms.Control.set_WindowText(String value)
at System.Windows.Forms.Control.set_Text(String value)
at System.Windows.Forms.Label.set_Text(String value)
at WindowsApplication1.Form1.DispararTimer(Object sender, ElapsedEventArgs e) in C:\Users\Palmieri\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb:line 5
at System.Timers.Timer.MyTimerCallback(Object state)
InnerException:
JABA 10/08/2012 13:35:28
#407692
Você tem que colocar o controle Timer no form em que quer mostrar os dados. Esse erro é porque você está colocando o Timer em uma classe que gera conflito de Thread com os controles do form.

Para capturar os dados das threads, você poderia usar o backgroundworker para sincronizar esses dados.

http://www.macoratti.net/vbn5_ept.htm

ou trabalhar com delegates diretamente:

http://www.macoratti.net/10/01/threading.htm
http://www.jorgepaulino.com/2008/03/trabalhando-com-threads-multi-tarefas.html

ou então

Mande essa parte de codigo para podermos analisar melhor.

vlw
PEGUDO 10/08/2012 15:33:07
#407715
Resposta escolhida
Cria uma Sub:

Public Sub Esperar(ByVal QuantosSegundos as uint16)
Dim Final As Date = TimeOfDay.AddSeconds(QuantosSegundos)

While Not TimeOfDay.Second >= Final.Second
Application.DoEvents
End While
End Sub

E vc chama a procedure assim:
Esperar(3)
DELPALMIS 16/08/2012 21:24:20
#408068
é isso ai que queria PEGUDO. Muito obrigado amigo.
Tópico encerrado , respostas não são mais permitidas