Solved

Do Until with a timer issues...

Posted on 2008-09-30
2
180 Views
Last Modified: 2010-04-21
I am working on some code that contains a Do Until statement that continually pings a computer until it comes online or the timer reaches 5 seconds. The reason I want it to wait and keep trying is that a previous script attempted to power on the computer. The problem I'm running into, is that the timer doesn't seem to do anything unless I put a msgbox in the loop statement. Only then does the timer do anything with the counter variable. I'd much rather I didn't have to continually click OK until it's done. Ideas?
Private Sub BackgroundWorker4_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker4.DoWork
 

            ifonline1 = 0
 

            counter = 0
 

            InitializeTimer()

            MsgBox("Attempting to power on " & strcomputer)

            Do Until ifonline1 = 1 Or counter >= 5
 

                On Error Resume Next

                Dim Ping As New Net.NetworkInformation.Ping

                Dim PingOptions As New Net.NetworkInformation.PingOptions

                PingOptions.Ttl = 64

                Dim PingReply As Net.NetworkInformation.PingReply = Ping.Send(strcomputer, 200)

                If PingReply.Status = Net.NetworkInformation.IPStatus.Success Then

                    ifonline1 = 1

                    flag4 = "ON"

                Else

                    ifonline1 = 0

                    flag4 = "OFF"

                End If
 

            Loop

            MsgBox(flag4)

            If ifonline1 = 1 Then

                Dim Host As Net.IPHostEntry = Net.Dns.GetHostEntry(strcomputer)

                Dim firstaddress As Net.IPAddress = Host.AddressList(0)

                ip = firstaddress.ToString

                

            End If

            flag1 = pc3

            flag2 = ip

            flag3 = rownum

            worker.ReportProgress(prog1)

        Next
 

End Sub
 

Private Sub InitializeTimer()

        ' Run this procedure in an appropriate event.

        counter = 0

        Timer1.Interval = 1000

        Timer1.Enabled = True

    End Sub
 

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
 

        If counter >= 6 Then

            ' Exit loop code.

            Timer1.Enabled = False

            counter = 0

        Else

            'MsgBox(counter)

            ' Run your procedure here.

            ' Increment counter.

            counter = counter + 1

        End If
 

    End Sub

Open in new window

0
Comment
Question by:jcamping
2 Comments
 
LVL 85

Accepted Solution

by:
Mike Tomlinson earned 95 total points
ID: 22610619
I would just get rid of the Timer altogether and add the timing logic directly into your loop.

Here is the big change:

            Dim endTime As DateTime = DateTime.Now.AddSeconds(5)
            Do Until ifonline1 = 1 OrElse DateTime.Now.Subtract(endTime).TotalMilliseconds > 0

See full code below:
        Private Sub BackgroundWorker4_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker4.DoWork

            ifonline1 = 0

            MsgBox("Attempting to power on " & strcomputer)
 

            Dim endTime As DateTime = DateTime.Now.AddSeconds(5)

            Do Until ifonline1 = 1 Or DateTime.Now.Subtract(endTime).TotalMilliseconds > 0
 

                On Error Resume Next

                Dim Ping As New Net.NetworkInformation.Ping

                Dim PingOptions As New Net.NetworkInformation.PingOptions

                PingOptions.Ttl = 64

                Dim PingReply As Net.NetworkInformation.PingReply = Ping.Send(strcomputer, 200)

                If PingReply.Status = Net.NetworkInformation.IPStatus.Success Then

                    ifonline1 = 1

                    flag4 = "ON"

                Else

                    ifonline1 = 0

                    flag4 = "OFF"

                End If

            Loop

            MsgBox(flag4)

            If ifonline1 = 1 Then

                Dim Host As Net.IPHostEntry = Net.Dns.GetHostEntry(strcomputer)

                Dim firstaddress As Net.IPAddress = Host.AddressList(0)

                ip = firstaddress.ToString                

            End If

            flag1 = pc3

            flag2 = ip

            flag3 = rownum

            worker.ReportProgress(prog1)

        Next

     End Sub

Open in new window

0
 

Author Closing Comment

by:jcamping
ID: 31501791
That works great! Thanks!
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture.   There is also a companion Debug Toolbar that looks like the followin…
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

910 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now