Online .txt dauerhaft auslesen

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Lawliet.

    Online .txt dauerhaft auslesen

    Hallo,
    möchte möglichst Sekundengenau ein txt Dokument auf meinem FTP Server auslesen. Die Variante soll zuverlässig und schnell sein. Arbeite derzeit mit einem Backgroundworker. Er liefert ein sehr sehr schnelles Ergebnis... Ändere ich das Textdokument auf dem Server ist es sofort in meinem Programm Aktualisiert. Geht es trotzdem schöner? Hin und wieder verschwindet mein Label welches der Backgroundworker beschreibt?!

    Variabeln Erläuterung:
    Spoiler anzeigen


    Inhalt2 =

    VB.NET-Quellcode

    1. Dim Inhalt2 as String

    Download =

    VB.NET-Quellcode

    1. Dim Download as New WebClient

    Fehler2 =

    VB.NET-Quellcode

    1. Dim Fehler2 as Boolean





    VB.NET-Quellcode

    1. Private Sub PartnerPfadDownloaden_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles PartnerPfadDownloaden.DoWork
    2. Try
    3. Inhalt2 = Download.DownloadString("http://www............................./PartnerPfad.txt")
    4. Catch ex As Exception
    5. Fehler2 = False
    6. End Try
    7. End Sub
    8. Private Sub PartnerPfadDownloaden_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles PartnerPfadDownloaden.RunWorkerCompleted
    9. If Fehler2 = True Then
    10. PartnerPfadError.Visible = True
    11. Else
    12. PartnerPfad.Text = Inhalt2
    13. PartnerPfadError.Visible = False
    14. End If
    15. PartnerPfadDownloaden.RunWorkerAsync()
    16. End Sub
    Bei einem Loop hängt sich doch die ganze Form auf wenn ich ca 3 txt's dauerhaft auslesen will oder?
    Außerdem wo soll ich den Loop den rein setzen? In einen Timer? Dann stolpert das Programm...
    Mit einem Loop wird das nicht klappen? Wie hast du dir das denn vorgestellt? :)
    Selbstverständlich im Backgroundworker ;) du könntest das aber auch in einem neuen Thread auslagern.
    Ich denke aber das permanente auslesen nervt deinen Webserver gewaltig.
    Ich würde an deiner stelle zwischen zeitig kleine Pausen einlegen lassen

    LG.L
    Der Backgroundworker kann nicht auf Controls zugreifen... also klappt das so nicht:

    VB.NET-Quellcode

    1. Private Sub ReadData_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles ReadData.DoWork
    2. Do
    3. PartnerPfad.Text = Download.DownloadString("http://www........../PartnerPfad.txt")
    4. Loop
    5. End Sub


    und da der ReadData Backgroundworker niemals den Status Completed haben wir kann ich es am Ende auch nicht übertragen... wie soll ich die Infos dann an mein Label senden?
    Mit einem Umweg kann er das sehr wohl, direkt klappt das nicht
    [VB.NET] Thread-Problem (Ungültiger threadübergreifender Vorgang)

    Das funktioniert auch beim Backgroundworker ganz gut.
    Sonst informiere dich mal "Threadübergreifender Vorgang Delegate"
    Ich danke euch!! Der Loop im Backgroundworker läuft einwandfrei :) Dankeee :thumbsup: :thumbsup:
    Eine Frage hätte ich allerdings noch :)

    Das ist jetzt mein Code:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. ReadData.RunWorkerAsync()
    3. End Sub
    4. Dim PartnerInfoDownload As New WebClient
    5. Dim PartnerInfoString As String
    6. Dim PartnerFolderDownload As New WebClient
    7. Dim PartnerFolderString As String
    8. Dim PartnerPfadDownload As New WebClient
    9. Dim PartnerPfadString As String
    10. Private Sub ReadData_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles ReadData.DoWork
    11. Do
    12. Try
    13. PartnerInfoString = PartnerInfoDownload.DownloadString("http://...../PartnerInfo.txt")
    14. Catch ex As Exception
    15. End Try
    16. Try
    17. PartnerPfadString = PartnerPfadDownload.DownloadString("http://...../PartnerPfad.txt")
    18. Catch ex As Exception
    19. End Try
    20. Try
    21. PartnerFolderString = PartnerFolderDownload.DownloadString("http://....../in.txt")
    22. Catch ex As Exception
    23. End Try
    24. Loop
    25. End Sub


    Gibt es eine elegante Methode zwischen jeder Loop Abfrage eine Sekunde Pause ein zu legen? Ich hätte jetzt einen Timer mit Interval 1000 immer dazwischen hauen lassen. Geht das vielleicht eleganter und Ressourcen schonender? :)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DrVisualBasic“ ()

    Ich arbeite öfters mit mehreren Threads, deshalb habe ich auch keine sorge wenn ich folgendes nutze

    VB.NET-Quellcode

    1. Thread.sleep(miliseounds)


    Ob das im Backgroundworker auch so funktioniert weiß ich nicht.
    Ist aber denke ich besser als die vielen Timer.

    LG.L

    //Edit
    PS: wieso erstellst du 3 verschiedene try catch Blöcke?

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

    ich glaube das was du machst wurde noch in VB6 genutzt, direkt über die API von Microsoft
    Thread.sleep gehört halt ins Framework, was das für einen unterschied macht kann ich dir nicht sagen.
    Ich würde allerdings zu Thread.sleep tendieren.

    LG.L
    Da ich recht wenig mit dem Backgroundworker mache kann ich dir eine schlichte
    Thread Lösung zeigen.

    musst du dementsprechend bearbeiten, falls du Einträge direkt vom Thread auslesen möchtest lohnt sich (Invoke / Delegate)

    VB.NET-Quellcode

    1. Imports System.Net
    2. Imports System.Threading
    3. Public Class Form1
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. ' Definiert einen neuen Thread & startet ihn anschließend
    6. Dim t1 As New Thread(AddressOf PermDownload)
    7. t1.IsBackground = True
    8. t1.Start()
    9. End Sub
    10. 'Denke das erklärt sich selbst ;)
    11. Dim Web As WebClient
    12. Dim inf(2) As String
    13. Private Sub PermDownload()
    14. Do
    15. Web = New WebClient
    16. Using Web
    17. inf(0) = Web.DownloadString("http://eascriptable.de.vu/TXT/Text1.txt")
    18. inf(1) = Web.DownloadString("http://eascriptable.de.vu/TXT/Text2.txt")
    19. inf(2) = Web.DownloadString("http://eascriptable.de.vu/TXT/Text3.txt")
    20. Thread.Sleep(3500) ' Pausiert diesen Thread, um den Webserver zu schonen
    21. End Using
    22. Loop
    23. End Sub
    24. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    25. MessageBox.Show(inf(0) & inf(1) & inf(2))
    26. End Sub
    27. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Lawliet“ () aus folgendem Grund: Kleine schönheits Änderung