Geschwindigkeit usw...

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

Es gibt 76 Antworten in diesem Thema. Der letzte Beitrag () ist von Facebamm.

    @Dksksm & @VaporiZed

    Moin moin

    Also ich hatte es soweit hinbekommen, das die beiden Threads gleichzeitig laufen und auch das tun was ich mir so gedacht hatte.
    Nun wollte ich diese "Routinen" einbauen um etwaige Fehler wie z.B. abziehen des USB-Sticks oder was auch immer passieren kann, abzufangen.
    Nach Umbau bekomme ich angezeigt:
    Fehler 1 Der =-Operator ist für die Typen "System.Threading.Tasks.Task(Of Boolean)" und "Boolean" nicht definiert.

    ​Warnung 4 Da auf diesen Aufruf nicht gewartet wird, wird die Ausführung der aktuellen Methode vor Abschluss des Aufrufs fortgesetzt. Ziehen Sie ein Anwenden des 'Await'-Operators auf das Ergebnis des Aufrufs in Betracht

    Wie kann ich das lösen? Danke

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub btn_copy_Click(sender As Object, e As EventArgs) Handles btn_copy.Click
    2. If btn_copy.DialogResult = Windows.Forms.DialogResult.OK Then
    3. Dim result1 As Boolean = String.IsNullOrWhiteSpace(tb_name.Text)
    4. If result1 = True Then
    5. lbl_error.Visible = True
    6. lbl_error.Text = "Feld Name kann nicht leer sein."
    7. End If
    8. Threadsstarten()
    9. End If
    10. End Sub
    11. Private Sub Threadsstarten()
    12. If zippeAsync() = True OrElse kopiereAsync() = True Then '<======= Hier steht die Fehlermeldung
    13. anzeigen(0, 0)
    14. lbltest.Text = CStr(Klass.x)
    15. lbltest2.Text = CStr(Klass.y)
    16. zippeAsync() '<=============2ter Fehler
    17. kopiereAsync()
    18. anzeigen(1, 1)
    19. 'MessageBox.Show("Die Daten wurden kopiert.")
    20. Else
    21. anzeigen(2, 2)
    22. 'MessageBox.Show("Ein Fehler trat auf, Daten wurden nicht kopiert.")
    23. End If
    24. End Sub
    25. Private Async Function zippeAsync() As Task(Of Boolean)
    26. Try
    27. Await Threading.Tasks.Task.Run(Sub() zippen())
    28. Klass.x = 1
    29. anzeigen(Klass.x, 0)
    30. Return True
    31. Catch ex As Exception
    32. Return False
    33. End Try
    34. End Function
    35. Private Async Function kopiereAsync() As Task(Of Boolean)
    36. Try
    37. Await Threading.Tasks.Task.Run(Sub() kopieren())
    38. Klass.y = 1
    39. anzeigen(Klass.y, 0)
    40. Return True
    41. Catch ex As Exception
    42. Return False
    43. End Try
    44. End Function
    45. Private Sub zippen()
    46. IO.Directory.CreateDirectory(Klass.HDD2temp)
    47. ZipFile.CreateFromDirectory(Klass.Source, Klass.HDD2temp & ".zip", CompressionLevel.Optimal, False)
    48. IO.Directory.Delete(Klass.HDD2temp)
    49. End Sub
    50. Private Sub kopieren()
    51. My.Computer.FileSystem.CopyDirectory(Klass.Source, Klass.HDD1temp)
    52. End Sub
    53. Private Sub anzeigen(ByVal x As Integer, ByVal y As Integer)
    54. If Klass.x = 1 Then
    55. lbltest.Text = "Zippen ist fertig"
    56. ElseIf Klass.y = 1 Then
    57. lbltest2.Text = "Kopieren ist fertig"
    58. End If
    59. If Klass.x = 1 And Klass.y = 1 Then
    60. tb_name.Enabled = True
    61. tb_name.Focus()
    62. btn_copy.Visible = True
    63. PictureBox1.Visible = False
    64. Else
    65. tb_name.Enabled = False
    66. btn_copy.Visible = False
    67. PictureBox1.Visible = True
    68. End If
    69. If Klass.x = 2 And Klass.y = 2 Then
    70. lbltest.Text = "Es trat ein Fehler auf"
    71. lbltest2.Text = "Es trat ein Fehler auf"
    72. End If
    73. End Sub

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Ich kann deinen Code schwer nachvollziehen, mit den Infos hagelt es Fehler ohne Ende und ich tu mich auch mit VB schwer.
    1. Deine Sub zippen und kopieren müssen geändert werden in Private Function kopieren() As Boolean z.B.
    2. Deine Sub Threadstarten wird Private Async Sub Threadsstarten()

    VB.NET-Quellcode

    1. Private Async Sub Threadsstarten()
    2. Dim funcResultA = True
    3. Dim funcResultB = True
    4. Await Task.Run(Sub() funcResultA = zippen())
    5. Await Task.Run(Sub() funcResultB = kopieren())
    6. If funcResultA AndAlso funcResultB Then
    7. Else
    8. anzeigen(2, 2)
    9. 'MessageBox.Show("Ein Fehler trat auf, Daten wurden nicht kopiert.")
    10. End If
    11. End Sub


    Natürlich müssen beide Funktionen jetzt auch einen Boolean zurückgeben, insoweit musst du dort deinen Code anpassen.
    Mehr brauchst du nicht, du machst es zu kompliziert.
    @Dksksm

    Halt leider nicht funktioniert.
    Habe jetzt nochmal alles überdacht und dann folgendes erreicht, was erstmal klappt, zumindest nach mehr als 20 Durchläufen. ;)

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub btn_copy_Click(sender As Object, e As EventArgs) Handles btn_copy.Click
    2. If btn_copy.DialogResult = Windows.Forms.DialogResult.OK Then
    3. Dim result1 As Boolean = String.IsNullOrWhiteSpace(tb_name.Text)
    4. If result1 = True Then
    5. lbl_error.Visible = True
    6. lbl_error.Text = "Feld Name kann nicht leer sein."
    7. End If
    8. Threadsstarten()
    9. End If
    10. End Sub
    11. Private Sub Threadsstarten()
    12. anzeigen(0, 0)
    13. zippeAsync()
    14. kopiereAsync()
    15. End Sub
    16. Private Async Sub zippeAsync()
    17. Await Threading.Tasks.Task.Run(Sub() zippen())
    18. anzeigen(Klass.x, Klass.y)
    19. End Sub
    20. Private Async Sub kopiereAsync()
    21. Await Threading.Tasks.Task.Run(Sub() kopieren())
    22. anzeigen(Klass.x, Klass.y)
    23. End Sub
    24. Private Function zippen() As Boolean
    25. Try
    26. If Directory.Exists(Klass.HDD2temp) Then
    27. Else
    28. Directory.CreateDirectory(Klass.HDD2temp)
    29. End If
    30. ZipFile.CreateFromDirectory(Klass.Source, Klass.HDD2temp & ".zip", CompressionLevel.Optimal, False)
    31. IO.Directory.Delete(Klass.HDD2temp)
    32. Klass.x = 1
    33. Return True
    34. Catch ex As Exception
    35. Klass.x = 2
    36. Return False
    37. End Try
    38. End Function
    39. Private Function kopieren() As Boolean
    40. Try
    41. My.Computer.FileSystem.CopyDirectory(Klass.Source, Klass.HDD1temp)
    42. Klass.y = 1
    43. Return True
    44. Catch ex As Exception
    45. Klass.x = 2
    46. Return False
    47. End Try
    48. End Function
    49. Private Sub anzeigen(ByVal x As Integer, ByVal y As Integer)
    50. If Klass.x = 2 OrElse Klass.y = 2 Then
    51. PictureBox1.Visible = False
    52. tb_name.Enabled = True
    53. btn_copy.Visible = True
    54. lbltest.Text = "Es trat ein Fehler beim zippen auf"
    55. lbltest2.Text = "Es trat ein Fehler beim kopieren auf"
    56. Return
    57. End If
    58. If Klass.x = 1 Then lbltest.Text = "Zippen ist fertig"
    59. If Klass.y = 1 Then lbltest2.Text = "Kopieren ist fertig"
    60. If Klass.x = 1 And Klass.y = 1 Then
    61. tb_name.Enabled = True
    62. tb_name.Focus()
    63. btn_copy.Visible = True
    64. PictureBox1.Visible = False
    65. Else
    66. tb_name.Enabled = False
    67. btn_copy.Visible = False
    68. PictureBox1.Visible = True
    69. End If
    70. End Sub

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Dann kannste zippen und kopieren aber wieder zu normalen Subs machen. Der Punkt ist: Was erwartest Du bei dieser Zeile?

    VB.NET-Quellcode

    1. If zippeAsync() = True OrElse kopiereAsync() = True Then
    Wenn man davon absieht, dass = True jeweils überflüssig ist, kann das doch gar nicht so bei asynchronen/nebenläufigen Methodenaufrufen funktionieren. Denn das Resultat steht doch erst dann fest, wenn die asynchronen Methoden fertig sind. Und wenn Du darauf warten willst, brauchst Du es gar nicht erst asynchron laufen zu lassen. Deine jetzige Lösung ist aber eine Möglichkeit, das Problem zu umgehen und zum Ziel zu kommen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed
    ​Deine jetzige Lösung ist aber eine Möglichkeit, das Problem zu umgehen und zum Ziel zu kommen.
    Was könnte man ändern?
    ...
    ..

    VB.NET-Quellcode

    1. ​If zippeAsync() = True OrElse kopiereAsync() = True Then

    Ja das war wohl bullshit ;)
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    @Dksksm
    Natürlich habe ich es versucht so umzusetzen. Erst war vieles mit grün unterkringelt und als ich das weg hatte lief das immer in den
    ​ Else anzeigen(2, 2) MessageBox.Show("Ein Fehler trat auf, Daten wurden nicht kopiert.") Zweig, wo bei nur die MsgBox aufpoppte aber nie das "anzeigen(2,2)" ausgeführt wurde.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    Erst war vieles mit grün unterkringelt
    Dann gleich mal alles auf scharf schalten. Grüne Warnungen haben im Code nix verloren, sondern sollten immer als Fehler das Kompilieren blockieren, damit man gar nicht erst in die Gefahr gerät, Warnungen zu ignorieren.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    Im Anhang meine jetzigen Standarteinstellungen. Das Mit den "Warnungen" habe ich nun eingeschaltet. Den Rest hatte ich schon länger so.

    Habe nun noch etwas geändert und alles bereinigt. Hatte gesehen das x und y ja gar nicht Public und in der Class sein müssen.
    Was nicht klappte war, die function zippen/kopieren wieder in eine Sub zu wandeln. Da klappte das mit dem Return nicht mehr.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class frm_copysd
    2. Dim Klass As New mainclass
    3. 'x Hilfsvariable für zip
    4. Dim x As Integer
    5. ' Hilfsvariable für kopie
    6. Dim y As Integer
    7. Private Sub frm_copysd_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    8. PicBoxAnimation.Image = My.Resources.progress
    9. PicBoxAnimation.Visible = False
    10. If Klass.readfrom_XML() = True Then
    11. Else
    12. MessageBox.Show("Ein Fehler trat auf, Daten wurden nicht gelesen.")
    13. End If
    14. If Klass.Zip = 0 Then lbl_zipp.Text = "Zippen ist aktiviert." Else lbl_zipp.Text = "Speichern ist aktiviert."
    15. lbl_error.Visible = False : btn_copy.Enabled = False : lbl_count.Visible = False
    16. lblzipp.Text = "" : lblkopie.Text = ""
    17. End Sub
    18. Private Sub tb_name_KeyDown1(sender As Object, e As KeyEventArgs) Handles tb_name.KeyDown
    19. If e.KeyCode = Keys.Enter Then
    20. tb_name.Text = tb_name.Text.Trim
    21. tb_source.Text = Klass.Source
    22. tb_hdd1.Text = Klass.HDD1 & tb_name.Text & "\" & Klass.DirDatum
    23. Klass.HDD1temp = Klass.HDD1 & tb_name.Text & "\" & Klass.DirDatum
    24. tb_hdd2.Text = Klass.HDD2 & tb_name.Text & "\" & Klass.DirDatum
    25. Klass.HDD2temp = Klass.HDD2 & tb_name.Text & "\" & Klass.DirDatum
    26. btn_copy.Focus()
    27. lbl_count.Visible = True : lbl_count.Text = Klass.countfiles()
    28. btn_copy.Enabled = True
    29. End If
    30. End Sub
    31. Private Sub btn_copy_Click(sender As Object, e As EventArgs) Handles btn_copy.Click
    32. If btn_copy.DialogResult = Windows.Forms.DialogResult.OK Then
    33. Dim result1 As Boolean = String.IsNullOrWhiteSpace(tb_name.Text)
    34. If result1 = True Then
    35. lbl_error.Visible = True
    36. lbl_error.Text = "Feld Name kann nicht leer sein."
    37. End If
    38. Threadsstarten()
    39. End If
    40. End Sub
    41. Private Sub Threadsstarten()
    42. x = 0 : y = 0
    43. anzeigen(x, y)
    44. zippeAsync()
    45. kopiereAsync()
    46. End Sub
    47. Private Async Sub zippeAsync()
    48. Await Threading.Tasks.Task.Run(Sub() zippen())
    49. anzeigen(x, y)
    50. End Sub
    51. Private Async Sub kopiereAsync()
    52. Await Threading.Tasks.Task.Run(Sub() kopieren())
    53. anzeigen(x, y)
    54. End Sub
    55. Private Function zippen() As Boolean
    56. Try
    57. If Not Directory.Exists(Klass.HDD2temp) Then Directory.CreateDirectory(Klass.HDD2temp)
    58. ZipFile.CreateFromDirectory(Klass.Source, Klass.HDD2temp & ".zip", CompressionLevel.Optimal, False)
    59. IO.Directory.Delete(Klass.HDD2temp)
    60. x = 1
    61. Return True
    62. Catch ex As Exception
    63. x = 2
    64. Return False
    65. End Try
    66. End Function
    67. Private Function kopieren() As Boolean
    68. Try
    69. My.Computer.FileSystem.CopyDirectory(Klass.Source, Klass.HDD1temp)
    70. y = 1
    71. Return True
    72. Catch ex As Exception
    73. x = 2
    74. Return False
    75. End Try
    76. End Function
    77. Private Sub anzeigen(ByVal x As Integer, ByVal y As Integer)
    78. If x = 0 And y = 0 Then
    79. lblzipp.Text = "Dateien zippen wurde gestartet."
    80. lblkopie.Text = "Dateien kopieren wurde gestartet."
    81. PicBoxAnimation.Visible = True
    82. tb_name.Enabled = False
    83. btn_copy.Visible = False
    84. Return
    85. End If
    86. If x = 2 OrElse y = 2 Then
    87. PicBoxAnimation.Visible = False
    88. tb_name.Enabled = True
    89. btn_copy.Visible = True
    90. lblzipp.Text = "Es trat ein Fehler beim zippen auf"
    91. lblkopie.Text = "Es trat ein Fehler beim kopieren auf"
    92. Return
    93. End If
    94. If x = 1 Then lblzipp.Text = "Zippen ist fertig"
    95. If y = 1 Then lblkopie.Text = "Kopieren ist fertig"
    96. If x = 1 And y = 1 Then
    97. tb_name.Enabled = True
    98. tb_name.Focus()
    99. btn_copy.Visible = True
    100. PicBoxAnimation.Visible = False
    101. End If
    102. End Sub
    103. Private Sub tb_name_GotFocus(sender As Object, e As EventArgs) Handles tb_name.GotFocus
    104. tb_name.Clear()
    105. tb_source.Clear()
    106. tb_hdd1.Clear()
    107. tb_hdd2.Clear()
    108. lbl_error.Visible = False
    109. btn_copy.Enabled = False
    110. End Sub
    111. End Class

    Bilder
    • Standart-1.jpg

      616,92 kB, 1.555×930, 41 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    nuja, bei Sub gibt's eben keinen Rückgabewert

    VB.NET-Quellcode

    1. Private Sub zippen()
    2. Try
    3. If Not Directory.Exists(Klass.HDD2temp) Then Directory.CreateDirectory(Klass.HDD2temp)
    4. ZipFile.CreateFromDirectory(Klass.Source, Klass.HDD2temp & ".zip", CompressionLevel.Optimal, False)
    5. IO.Directory.Delete(Klass.HDD2temp)
    6. x = 1
    7. Catch ex As Exception
    8. x = 2
    9. End Try
    10. End Sub
    11. Private Sub kopieren()
    12. Try
    13. My.Computer.FileSystem.CopyDirectory(Klass.Source, Klass.HDD1temp)
    14. y = 1
    15. Catch ex As Exception
    16. x = 2
    17. End Try
    18. End Sub

    Aaallerdings: Fange nur Exceptions ab, die Du kennst und sinnvoll bearbeiten kannst. Dementsprechend: Werde bei den Catch-Bereichen konkret, damit Du auch angeben kannst, was genau schiefgelaufen ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich verstehe nicht. Wie soll eine alternative Ausgabe Deiner Meinung nach aussehen? Datei? eMail? Bunte Bildschirmpunkte?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Achso, ja gut. Ne TextBox kannst Du schon machen, solange die Exception innherlab des Form-Codes auftritt. Denn in einer sonstigen Klasse hast Du ja offiziell/standardmäßig keinen Zugriff auf ein FormControl wie ne TextBox.

    ##########

    @Amelie: Bedenke aber, wieviele Exception-Infos Dir durch eine MessageBox oder gar einzeilige TextBox verloren gehen (können). Ich protokolliere in einer Datei, falls ich die Exception nicht sinnvoll/im Voraus behandeln kann:
    • Zeitpunkt der Exception
    • Programm
    • die ExceptionMessage natürlich
    • die Methode, in der der Fehler aufgetreten ist
    • StackTrace (Methoden-Aufrufkaskade)
    • innere ExceptionMessage, falls vorhanden
    An die Daten, welche Zeile oder welcher Variable, welcher Wert, also die Details komm ich leider noch nicht ran.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    @VaporiZed

    Habe nun einen weiteren Teil von meinem Programm so umgebaut das der alte VisualBasic NameSpace weg ist.
    Jetzt habe ich aber das Problem, was du eben angesprochen hast. ich kann die Dateien nicht mehr in der ListBox auflsiten.
    Ohne das ganze Async funktioniert der Code soweit.

    Ich weiß da muss nun etwas mit Invoke / Delegaten etc passieren .. aber wie, da komme ich nicht hinter. ?(

    VB.NET-Quellcode

    1. Me.Invoke(Sub() ????????? ))


    EDIT: Ich glaub ich habs ;) Testen Testen


    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub btn_copy_Click(sender As Object, e As EventArgs) Handles btn_copy.Click
    2. kopiereAsync()
    3. End Sub
    4. Private Async Sub kopiereAsync()
    5. PBcopy.Visible = True
    6. Await Threading.Tasks.Task.Run(Sub() copyfiles())
    7. PBcopy.Visible = False
    8. End Sub
    9. Private Sub copyfiles()
    10. Extension()
    11. If FileExtension = Nothing Then
    12. Dim übergabe As String = "nefcr2arwjpg"
    13. MessageBox.Show("Bitte Dateityp auswählen", "Hinweis", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    14. Exit Sub
    15. End If
    16. Try
    17. If Not Directory.Exists(Klass.Workdir & tempdir) Then Directory.CreateDirectory(Klass.Workdir & tempdir)
    18. For Each line In tb_auswahl.Lines
    19. Dim source As String = line
    20. For Each filename As String In Directory.GetFiles(tb_eingabe.Text, "*" & source & FileExtension, SearchOption.AllDirectories)
    21. Dim sourceFile = Path.GetFileName(source & FileExtension)
    22. Dim tempFilePath = Klass.Workdir & tempdir & sourceFile
    23. lb_worktarget.Items.Add(tempFilePath) '<=======================Hier fliegst raus....
    24. File.Copy(filename, tempFilePath, True)
    25. Next
    26. Next
    27. Catch ex As Exception
    28. MessageBox.Show("Fehler: " & ex.ToString)
    29. End Try
    30. End Sub

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

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

    statt den ????? einfach das, was Du machen willst. (Und statt Invoke BeginInvoke)

    VB.NET-Quellcode

    1. Me.BeginInvoke(Sub() lb_worktarget.Items.Add(tempFilePath)))
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    Also das mit dem Invoke habe ich nun so gelößt, klappt auch wunderbar. ;)
    Aber jetzt sehe ich mal wieder den Wald ..nicht....
    In der If Schleife ob die Dateien denn vorhanden sind...

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub btn_copy_Click(sender As Object, e As EventArgs) Handles btn_copy.Click
    2. kopiereAsync()
    3. End Sub
    4. Private Async Sub kopiereAsync()
    5. Await Threading.Tasks.Task.Run(Sub() copyfiles())
    6. End Sub
    7. Private Sub copyfiles()
    8. Extension()
    9. If FileExtension = Nothing Then
    10. Dim übergabe As String = "nefcr2arwjpg"
    11. MessageBox.Show("Bitte Dateityp auswählen", "Hinweis", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    12. Exit Sub
    13. End If
    14. Try
    15. Me.Invoke(Sub() PBshow(True))
    16. For Each line In tb_auswahl.Lines
    17. Dim source As String = line
    18. For Each filename As String In Directory.GetFiles(tb_eingabe.Text, "*" & source & FileExtension, SearchOption.AllDirectories)
    19. Dim sourceFile = Path.GetFileName(source & FileExtension)
    20. Dim tempFilePath = Klass.Workdir & tempdir & sourceFile
    21. If System.IO.File.Exists(tempFilePath) Then
    22. Me.Invoke(Sub() listbox(sourceFile & "nicht vorhanden")) '<======== Das macht der code nicht wenn Dateien nicht vorhanden!!
    23. Else
    24. Me.Invoke(Sub() listbox(tempFilePath)) '<====== Das läuft einwandfrei.
    25. If Not Directory.Exists(Klass.Workdir & tempdir) Then Directory.CreateDirectory(Klass.Workdir & tempdir)
    26. File.Copy(filename, tempFilePath, True)
    27. End If
    28. Next
    29. Next
    30. Threading.Thread.Sleep(2000)
    31. Me.Invoke(Sub() PBhide(False))
    32. Catch ex As Exception
    33. MessageBox.Show("Fehler: " & ex.ToString)
    34. End Try
    35. End Sub
    36. Private Sub listbox(result As String)
    37. lb_worktarget.Items.Add(result)
    38. End Sub
    39. Private Sub PBshow(result As Boolean)
    40. PBcopy.Visible = result
    41. End Sub
    42. Private Sub PBhide(result As Boolean)
    43. PBcopy.Visible = result
    44. lbl_status.Visible = True
    45. lbl_status.Text = "Dateien ins Arbeitsverzeichnis kopiert."
    46. End Sub

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    VB.NET-Quellcode

    1. If System.IO.File.Exists(tempFilePath) Then
    2. Me.Invoke(Sub() listbox(sourceFile & "nicht vorhanden")) '<======== Das macht der code nicht wenn Dateien nicht vorhanden!!
    Natürlich nicht. Der Code wird nur ausgeführt, wenn die Bedingung zutrifft, also die Datei vorhanden ist. Oder versteh ich Dich falsch?
    btw: If-Schleife
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    Der code soll mit aber auch in der Listbox anzeigen, wenn die dateien nicht gefunden werden oder nicht vorhanden sind.

    Hab echt da std drangesessen und nix funktioniert. ;(

    Das mit meinen Invoke so OK??
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Dann versteh ich Deine (Programm)Logik nicht. Da steht doch:

    VB.NET-Quellcode

    1. Dim sourceFile = Path.GetFileName(source & FileExtension)
    2. Dim tempFilePath = Klass.Workdir & tempdir & sourceFile
    3. If System.IO.File.Exists(tempFilePath) Then
    4. Me.Invoke(Sub() listbox(sourceFile & "nicht vorhanden")) '<======== Das macht der code nicht wenn Dateien nicht vorhanden!!

    Also: Wenn "Klass.Workdir & tempdir & sourceFile" der Pfad eine existierenden Datei ist und die Datei Test.txt heißt, dann schreibe in die Listbox Test.txtnicht vorhanden (ja, da fehlt ein Leerzeichen in dem Text, denn so steht es (falsch) im Code). Aber warum sollte - wenn die Datei exisiert - in die ListBox geschrieben werden, dass sie nicht vorhanden ist? Da ergibt die Codelogik keinen Sinn.

    Das mit dem Invoke ist ok. Wie gesagt, BeginInvoke ist zu bevorzugen. Invoke führt eine Aktion aus und wartet, bis diese fertig ist. Einen ListBox-Eintrag hinzuzufügen, dauert nicht lange, aber BeginInvoke wartet eben nicht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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