Massive Probleme mit Arrays

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von mikeb69.

    Massive Probleme mit Arrays

    Hi.
    Also ich habe immer mehr Probleme mit Arrays.
    Ich finde das Array-Handling ist das schlechteste, was ich bisher gesehen habe...
    Folgender Code wirft mit Arrays nur Fehler ab - ohne funktioniert er:

    VB.NET-Quellcode

    1. Public Class Haupt
    2. Dim Prozesse As ArrayList
    3. Private Sub Warter_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Warter.Tick
    4. ExecWatch()
    5. End Sub
    6. Private Sub Haupt_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    7. Warter.Enabled = True
    8. End Sub
    9. Private Sub ExecWatch()
    10. For Each Prozess As Process In Process.GetProcesses
    11. 'If Prozesse.Contains(Prozess.Id) Then
    12. 'Continue For
    13. 'End If
    14. 'Prozesse(Prozess.Id) = 1
    15. DatenLetzter.Text = "Letzter Prozess: " & Prozess.ProcessName
    16. 'MsgBox("Es wurde ein neuer Prozess entdeckt!" & vbCr & vbCr & "Name: " & Prozess.ProcessName & vbCr & "ID" & Prozess.Id, MsgBoxStyle.Exclamation, "exeWatch")
    17. Next
    18. DatenRegistriert.Text = "Registrtierte Prozesse: " & Process.GetProcesses.Length
    19. DatenÜberwacht.Text = "Überwachte Prozesse: " & 0 & " (" & 0 / Process.GetProcesses.Length & "%)"
    20. End Sub
    21. End Class


    Vielleicht liegt's auch an mir - kann mir das vielleicht mal jemand ordentlich erklären? Oder gibt es dazu sogar ein Tutorial?

    EDIT: Die 0 in der 3. letzten Zeile sollten eigentlich für die Länge des Prozesse-Arrays stehen ;)

    ~ Chris
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    Hi Chrisber,

    ich versteh grad nicht warum du überhaput eine ArrayList verwendest, wenn du dort eh nur Integerwerte abspeichern möchtest.
    Versuch es doch mal mit:

    VB.NET-Quellcode

    1. Dim Prozesse as New List(Of Integer)


    beste Grüße,
    Hobbit.
    Hi.
    Ja sorry - ich wusste nicht mal das es sowas gibt ^^
    Danke, werde es mal damit versuchen!

    EDIT: Danke - es funktioniert nun 1a!
    Das Problem ist nun noch, zu prüfen, ob der Prozess noch offen ist.

    Ich wollte es so machen, aber so kriege ich immer einen "Zugriffsfehler" in Zeile 28.

    VB.NET-Quellcode

    1. Public Class Haupt
    2. Dim Prozesse As New List(Of Integer)
    3. Private Sub Warter_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Warter.Tick
    4. ExecWatch()
    5. End Sub
    6. Private Sub Haupt_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    7. ExecWatch(False)
    8. Warter.Enabled = True
    9. End Sub
    10. Private Sub ExecWatch(Optional ByVal Nachricht As Boolean = True)
    11. For Each Prozess As Process In Process.GetProcesses
    12. If Prozesse.Contains(Prozess.Id) Then
    13. Continue For
    14. End If
    15. Prozesse.Add(Prozess.Id)
    16. DatenLetzter.Text = "Letzter Prozess: " & Prozess.ProcessName
    17. If Nachricht = True Then
    18. MsgBox("Es wurde ein neuer Prozess entdeckt!" & vbCr & vbCr & "Name: " & Prozess.ProcessName & vbCr & "ID" & Prozess.Id, MsgBoxStyle.Exclamation, "exeWatch")
    19. End If
    20. Next
    21. For Each Prozess As Integer In Prozesse
    22. If Process.GetProcessById(Prozess).HasExited Then ' Zugriffsfehler
    23. Prozesse.Remove(Prozess)
    24. End If
    25. Next
    26. DatenRegistriert.Text = "Registrtierte Prozesse: " & Process.GetProcesses.Length
    27. DatenÜberwacht.Text = "Überwachte Prozesse: " & Prozesse.Count & " (" & Prozesse.Count / Process.GetProcesses.Length * 100 & "%)"
    28. End Sub
    29. End Class


    Mache ich da etwas falsch?

    ~ Chris
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Chrisber“ ()

    hallo chrisber,

    hier

    VB.NET-Quellcode

    1. For Each Prozess As Integer In Prozesse
    2. If Process.GetProcessById(Prozess).HasExited Then ' Zugriffsfehler
    3. Prozesse.Remove(Prozess)
    4. End If
    5. Next

    suchst du doch den prozess - durch die prozess-id.
    warum übergibst du dann nicht diese ?

    gruss

    mikeb69