FTP Download in einem Thread

  • VB.NET

Es gibt 39 Antworten in diesem Thema. Der letzte Beitrag () ist von One-Soft.

    FTP Download in einem Thread

    Hey,

    Ich habe eine Funktion für einen FTP Download.
    Diese soll bei Start des Programms in einem Thread ausgeführt haben. Jedoch dauert es immer 14 Sekunden bis die Funktion aufgerufen wird (was ich ehrlich gesagt nicht verstehe).

    Deklaration des Threads:

    VB.NET-Quellcode

    1. Dim FTPThread As New Thread(New ThreadStart(AddressOf Me.FTPDownload))



    FormMain - Code für den Thread:

    VB.NET-Quellcode

    1. FTPThread.Start()



    Eigentliche Funktion:

    VB.NET-Quellcode

    1. Private Sub FTPDownload()
    2. Dim url As String = "ftp://" & ComboBoxDianeIP.Text & "/testlog" & "/pickup_out" Dim ip As String = ComboBoxDianeIP.Text Dim username As String = "" Dim password As String = "" Dim file As String = Application.StartupPath & GetFile
    3. Try Using ftp As New Net.WebClient() ftp.Credentials = New Net.NetworkCredential(username, password, ip) ftp.DownloadFile(url, file) End Using PictureBoxFTP.BackColor = Color.Green
    4. Catch ex As Exception PictureBoxFTP.BackColor = Color.Red End Try oClassCheck.ReadFromFile()
    5. End Sub


    Die Funktion oClassCheck.ReadFromFile() liest einfach eine Datei aus und verarbeitet den Text in Variablen

    Bitte um möglichst schnelle Hilfe,
    lg. Matzeee
    Ok anders..Gebe bei deinem Sub FTPDownload() bei der ersten Zeile also vor Dim url as String....
    eine Messagebox.Show("Test") hin.

    Weil dann wissen wir mal, ob es wirklich 14 Sekunden dauert bis der Sub aufgerufen wird oder nur eine Funktion.
    Whos Faster ALPHA: Bald....
    Nutze die Async-Methoden der WebClient-Klasse. Setze auch die .Proxy-Property auf Nothing, wenn Du keinen Proxy nutzt. Async lädt die Daten in einem extra Thread.

    Ausserdem, nutze nicht FTP, sondern lade die Dateien per HTTP herunter. Schreibe niemals Zugangsdaten in den QuellCode.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    SpaceyX schrieb:

    Nutze die Async-Methoden der WebClient-Klasse. Setze auch die .Proxy-Property auf Nothing, wenn Du keinen Proxy nutzt. Async lädt die Daten in einem extra Thread.

    Ausserdem, nutze nicht FTP, sondern lade die Dateien per HTTP herunter. Schreibe niemals Zugangsdaten in den QuellCode.
    ändert auch nichts :S
    Es gibt keine Zugangsdaten ich verbinde mich mit dem Gerät direkt, ist also egal wo sie stehen.
    Wie soll ich von einem FTP - Server mit HTTP etwas herunterladen ?

    Digot - Software schrieb:

    Wie lange hast du gewartet?
    ich warte immer noch :S


    Der aktuelle Code ist:

    VB.NET-Quellcode

    1. Private Sub FTPDownload()
    2. MessageBox.Show("Test")
    3. Dim url As String = "ftp://" & ComboBoxDianeIP.Text & "/testlog" & "/pickup_out" 'FTP link zur Logdatei"
    4. Dim ip As String = ComboBoxDianeIP.Text 'die IP zum Verbinden (im Interface zum Auswählen)
    5. Dim username As String = ""
    6. Dim password As String = ""
    7. Dim file As String = Application.StartupPath & GetFile 'StartupPath gibt Verzeichnis der .exe Datei zurück
    8. Try 'falls keine Netzwerkverbindung / falsche IP Adresse
    9. Using ftp As New Net.WebClient()
    10. ftp.Credentials = New Net.NetworkCredential(username, password, ip) 'FTP Credentials festlegen
    11. 'ftp.DownloadFile(url, file) 'Datei herunterladen
    12. ftp.DownloadFileAsync(Uri(url), file)
    13. End Using
    14. PictureBoxFTP.BackColor = Color.Green
    15. Catch ex As Exception
    16. PictureBoxFTP.BackColor = Color.Red
    17. End Try
    18. oClassCheck.ReadFromFile()
    19. End Sub

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

    VB.NET-Quellcode

    1. Using ftp As New Net.WebClient()
    2. ftp.Credentials = New Net.NetworkCredential(username, password, ip) 'FTP Credentials festlegen
    3. 'ftp.DownloadFile(url, file) 'Datei herunterladen
    4. ftp.DownloadFileAsync(Uri(url), file)
    5. End Using
    was macht das End Using - weißt dus?

    Matzeee schrieb:

    ich schätze damit wird ftp nicht mehr als Net.WebClient() genutzt?
    Schätzen ist schlecht, weil dassis ein wichtiger Pattern, den sollteste gründlich nachlesen: dieses Buch lesen (hingegen das Galileio-Openbook ist Mist)

    Aber deine Schätzung ist nicht ganz verkehrt: End Using zerstört den WebClient.
    Jo, aber was ist mit dem asynchronen Download? Der ist ja noch garnet fertig! 8|


    (So, auch wenn du Using jetzt ein bischen besser verstehst: Das reicht noch nicht - wirklich nachlesen in dem Openbook)

    ErfinderDesRades schrieb:

    Aber deine Schätzung ist nicht ganz verkehrt: End Using zerstört den WebClient.
    Jo, aber was ist mit dem asynchronen Download? Der ist ja noch garnet fertig!



    Hab inzwischen auch versucht den WebClient einfach zu deklarieren (nicht in der Funktion sondern in der Klasse) und ich komme auf das gleiche Ergebnis.
    Funktion wird einmal aufgerufen und dann nicht mehr.
    Das muss doch irgedendetwas mit dem Thread selber zu tun haben ? Wenn ich es in einem Timer aufrufe läuft alles durch (dann stürzt es jedoch nach der Zeit ab)

    ErfinderDesRades schrieb:

    nun hast du deinen Code grundlegend geändert, redest mit mir aber drüber, als täte ich ihn kennen. 8|


    Ich habe nun oben den WebClient deklariert:

    VB.NET-Quellcode

    1. Dim ftp As New Net.WebClient()


    Und meine Funktion sieht wie folgt aus:

    VB.NET-Quellcode

    1. Private Sub FTPDownload()
    2. MessageBox.Show("Test")
    3. Dim url As String = "ftp://" & ComboBoxDianeIP.Text & "/testlog" & "/pickup_out" 'FTP link zur Logdatei"
    4. Dim ip As String = ComboBoxDianeIP.Text 'die IP zum Verbinden (im Interface zum Auswählen)
    5. Dim username As String = ""
    6. Dim password As String = ""
    7. Dim file As String = Application.StartupPath & GetFile 'StartupPath gibt Verzeichnis der .exe Datei zurück
    8. 'Try 'falls keine Netzwerkverbindung / falsche IP Adresse
    9. ftp.Credentials = New Net.NetworkCredential(username, password, ip) 'FTP Credentials festlegen
    10. ftp.DownloadFile(url, file)
    11. PictureBoxFTP.BackColor = Color.Green
    12. ' Catch ex As Exception
    13. 'PictureBoxFTP.BackColor = Color.Red
    14. 'End Try
    15. oClassCheck.ReadFromFile()
    16. End Sub
    Naja ergibt nicht wirklich Sinn wenn man in einem Thread die Async Methode verwendet oder?
    Des Weiteren wird ja von der ReadFromFile() Funktion die aktuellste Datei benötigt.

    So jetzt nochmal mit DownloadAsync probiert ändert aber nichts.

    VB.NET-Quellcode

    1. ftp.DownloadFileAsync(New Uri(url), file)

    statt

    VB.NET-Quellcode

    1. ftp.DownloadFile(url, file)