Backgroundworker Löst ProgressChanged Ereignis nicht aus.

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    Backgroundworker Löst ProgressChanged Ereignis nicht aus.

    Guten Tag,
    Kann mir einer sagen, wieso das Ereignis ProgressChanged nicht ausgelöst wird?

    bgw DoWork :

    Quellcode

    1. For i As Integer = 0 To 1 Step 0
    2. If close_form = True Then Exit Sub
    3. If something_found() = True Then
    4. bgw.ReportProgress(Nothing, {"test", "test"})
    5. End If
    6. Threading.Thread.Sleep(100)
    7. Next


    Er geht immer in das If rein aber nie in das ProgressChanged Ereignis

    Quellcode

    1. Private Sub bgw_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles bgw.ProgressChanged
    2. close_form = True
    3. End Sub


    Vielen dank für die Bemühungen.

    kiges schrieb:

    For i As Integer = 0 To 1 Step 0
    Führt das überhaupt aus? Zudem wozu überhaupt die Schleife?
    Außerdem setzt Du close_form in bgw_ProgressChanged explizit auf true anstatt das direkt zu machen. Ich verstehe die Codelogik daher auch nicht ganz.

    Lenre zu debuggen. Setze Haltepunkte und schau Dir an, ob die entsprechenden Zeilen durchlaufen werden.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Achso.. Sorry... Ja ich habe eine Haltemarke auf Zeile 5 gemacht. Da hält er dann auch an. Ich habe auch die ganze Reihe voller Halte marken gemacht funktioniert alles super. Nur das Ereignis macht er nicht. Ja ich habe nur ein teil des Codes hier gepostet von dem ProgressChanged Ereignis. Denn im ProgressChanged Ereignis wird auf die Form zugegriffen. ich habe eine Halte marke auf dem form_close = true gemacht weil das als erstes ausgeführt wird.

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

    Wo ist der Sinn vom ReportProgress, wenn Du da nur die Variable setzt? Stattdessen kannst Du das doch direkt machen.
    Und die Sub führt wirklich nicht aus?

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Zeig' mal bitte den ganzen Code.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Nicht schön aber selten!

    Quellcode

    1. Imports System.Net.Sockets
    2. Imports System.IO
    3. Imports System.Drawing.Imaging
    4. Imports System.Net
    5. Imports System.ComponentModel
    6. Public Class Form1
    7. Dim stream As NetworkStream
    8. Dim streamw As StreamWriter
    9. Dim streamr As StreamReader
    10. Dim client As TcpClient
    11. Private Delegate Sub DAddItem(ByVal s As String)
    12. Dim server_ip As String = "127.0.0.1"
    13. Dim nick As String = My.User.Name
    14. Dim close_form As Boolean = False
    15. Private Sub AddItem(ByVal s As String)
    16. Try
    17. Catch
    18. End Try
    19. End Sub
    20. Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    21. Try
    22. client.Close()
    23. stream.Close()
    24. streamw.Close()
    25. streamr.Close()
    26. Catch
    27. End Try
    28. End Sub
    29. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    30. End Sub
    31. Sub send_string(ByVal text As String)
    32. streamw.WriteLine(text)
    33. streamw.Flush()
    34. End Sub
    35. Function something_found() As Boolean
    36. Try
    37. For Each Process In System.Diagnostics.Process.GetProcesses
    38. If Process.ProcessName.ToLower.Contains("taskmgr") Then
    39. Return True
    40. Exit Function
    41. End If
    42. Next
    43. Return False
    44. Catch
    45. End Try
    46. End Function
    47. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    48. If something_found() = True Then
    49. Me.Close()
    50. Exit Sub
    51. End If
    52. bgw.RunWorkerAsync()
    53. retry:
    54. Try
    55. client = New TcpClient
    56. client.Connect(server_ip, 6501)
    57. If client.Connected Then
    58. stream = client.GetStream
    59. streamw = New StreamWriter(stream)
    60. streamr = New StreamReader(stream)
    61. streamw.WriteLine(nick) ' das ist optional.
    62. streamw.Flush()
    63. End If
    64. Catch
    65. Threading.Thread.Sleep(10)
    66. If close_form = False Then GoTo retry
    67. End Try
    68. While close_form = False
    69. Try
    70. Dim connectedd As Boolean = client.Connected
    71. Try
    72. streamw.WriteLine("test")
    73. streamw.Flush()
    74. Catch ex As Exception
    75. connectedd = False
    76. End Try
    77. If connectedd = False Then refresh_connection()
    78. Catch
    79. End Try
    80. Try
    81. Me.Invoke(New DAddItem(AddressOf AddItem), streamr.ReadLine)
    82. Catch
    83. If close_form = False Then refresh_connection()
    84. End Try
    85. End While
    86. Me.Close()
    87. End Sub
    88. Sub refresh_connection()
    89. Try
    90. Threading.Thread.Sleep(1000)
    91. client.Close()
    92. client = New TcpClient
    93. client.Connect(server_ip, 6501) ' hier die ip des servers eintragen.
    94. ' da dieser beim testen wohl lokal läuft, hier die loopback-ip 127.0.0.1.
    95. If client.Connected Then
    96. stream = client.GetStream
    97. streamw = New StreamWriter(stream)
    98. streamr = New StreamReader(stream)
    99. streamw.WriteLine(nick) ' das ist optional.
    100. streamw.Flush()
    101. End If
    102. Catch
    103. End Try
    104. End Sub
    105. Private Sub bgw_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bgw.DoWork
    106. For i As Integer = 0 To 1 Step 0
    107. If close_form = True Then Exit Sub
    108. If something_found() = True Then
    109. bgw.ReportProgress(Nothing, {"test", "test"})
    110. Exit Sub
    111. End If
    112. Threading.Thread.Sleep(100)
    113. Next
    114. End Sub
    115. Private Sub Hide_virus_bgw_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles bgw.ProgressChanged
    116. close_form = True
    117. Me.Close()
    118. End Sub
    119. End Class


    Ich weiß in dem ProgressChanged ist noch kein Schwerer Eingriff in die Form. Aber das kommt noch. Außerdem funktioniert Der RunWorkerCompleted Auch nicht. Habe ich ebend getestet.
    Dem Code nach zu urteilen handelt es sich hier um Malwareprogrammierung.
    Thema geschlossen.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: