VisualBasic ProgressBar-Timer Problem

NitroTurboRatte

Lieutenant
Registriert
Juli 2007
Beiträge
577
Sehr geertes Forum,
ich schreibe gerade eine Anwendung die Auf Knopfdruck einen MagicPaket versendet um einen Rechner in meinem Netz einzuschalten, jedoch habe ich gewaltige Probleme bei dem Verlauf der ProgressBar, hier zunächst den Code

Code:
Imports System
Imports System.Timers
Imports System.Net
Imports System.Net.Sockets

Public Class Form1
    Dim aTimer As New System.Timers.Timer()

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        NetworkFunctions.WakeOnLan.WakeUp("00-1s-u0-j8-A2-p7")
        AddHandler aTimer.Elapsed, AddressOf OnTimedEvent
        aTimer.Interval = 500
        aTimer.Enabled = True
    End Sub

    Private Sub OnTimedEvent(ByVal source As Object, ByVal e As ElapsedEventArgs)
        Dim progr As Byte = 10
        Dim test As Boolean = NetworkFunctions.Ping
        If test = False Then
            Me.ProgressBar1.Value = progr
            progr = progr - progr / 10
        Else
            aTimer.Enabled = False
            ProgressBar1.Value = 100
        End If
    End Sub
End Class
Module NetworkFunctions
    Public Function Ping() As Boolean
        Dim value As Boolean = My.Computer.Network.Ping("192.168.1.22", 100)

        If value = True Then
            Return True
        Else
            Return False
        End If

    End Function

    Public Class WakeOnLan

        Public Const MAC_ADDR_BYTES As Integer = 6
        Private Const PORT_BROADCAST = 2304

        Public Shared Function GetMagicPacket(ByVal macAddress As String) As Byte()
            Dim Packet As Byte() = New Byte(5 + 16 * MAC_ADDR_BYTES) {} '101 => 102 elements
            Dim strNumbers As String() = macAddress.Split(New Char() {":", ",", ";", "-"})
            Dim macBytes As Byte() = New Byte(5) {}

            If strNumbers.Length <> 6 Then
                Throw New Exception("MAC Address incorrect!!!")
            End If

            'Convert Numbers to Bytes and set the first 6 FF Values
            For i As Integer = 0 To 5
                Packet(i) = &HFF
                Dim strNumber As String = strNumbers(i)

                'Strip possible leading 0x statements
                If strNumber.StartsWith("0x") Then
                    strNumber = strNumber.Substring(2, 2)
                End If

                macBytes(i) = CByte(Int32.Parse(strNumber, System.Globalization.NumberStyles.HexNumber))
            Next i

            'Write the MAC address 16 times after the 6 FF values
            For j As Integer = 0 To 15
                For i As Integer = 0 To 5
                    Packet(6 + j * 6 + i) = macBytes(i)
                Next i
            Next j

            Return Packet
        End Function

        Public Shared Sub WakeUp(ByVal macAddress As String)
            Dim s As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
            s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1)

            Dim Message As Byte() = GetMagicPacket(macAddress)

            Dim IPEP As IPEndPoint = New IPEndPoint(IPAddress.Broadcast, PORT_BROADCAST)
            s.SendTo(Message, IPEP)
        End Sub

    End Class

End Module

Bei Me.ProgressBar1.Value... schreibt der Compiler
Ungültiger threadübergreifender Vorgang...

Aah... ich weiß nicht mehr weiter... kann mir jemand aus der Patche helfen?
Wäre sehr dankbar :D
 
Zuletzt bearbeitet:
Code:
Private Sub OnTimedEvent(ByVal source As Object, ByVal e As ElapsedEventArgs)
    ' Timer läuft nicht im selben Thread, wie die Form, also prüfen und ggfs. einfach nochmal "Invoken"
    If Me.InvokeRequired Then
      Me.Invoke(New System.Timers.ElapsedEventHandler(AddressOf OnTimedEvent), source, e)
      Return
    End If
    Dim progr As Byte = 10
    Dim test As Boolean = NetworkFunctions.Ping
    If test = False Then
      Me.ProgressBar1.Value = progr
      progr = progr - progr / 10
    Else
      aTimer.Enabled = False
      ProgressBar1.Value = 100
    End If
End Sub
 
Ein großes Dankeschön an euch beide :)

Ich hab nur noch das kleine Problem dass die ProgressBar nicht sekündlich weiteren Verlauf hinzufügt, werde es aber erstmal selber ein wenig ausprobieren ;)
 
Zurück
Oben