CPU schonend & Laggfrei Text aktuallisieren..

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von backtothetoast.

    CPU schonend & Laggfrei Text aktuallisieren..

    hi,

    ich programmiere gerade eine anwendung, die es einem erleichtert sourcen zu kompilieren.
    dafür wird normalerweise ein einfaches cmd fenster benutzt. dies möchte ich in diesem fall auch tun, nur wird die ausgabe in eine textdatei hinterlegt. aus dieser textdatei möchte ich jede aktuallisierung in einer richtextbox wiedergeben. das laggfrei und sehr cpu schonend. bin da leider nicht so schlau.

    danke schonmal :)
    Sicher, dass du die Compilerausgabe nicht irgendwie in den StandardOutput bekommst? Wenn ja, dann kannst du bequem mit einem StreamReader (in einem Hintergrundthread?) lesen.
    Um welchen Compiler handelt es sich denn?

    Eine Textdatei nach Änderung einzulesen hört sich nicht sonderlich sauber an. Ich bin sicher, dass man den Output auch anders hinkriegt.
    Von meinem iPhone gesendet
    es handelt sich um ein c++ compiler.

    edit:

    mit folgenden code habe ich es mit dem filesystemwatcher ausprobiert, jedoch ob ich die datei ändere geschiet nichts.

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private WithEvents watcher As IO.FileSystemWatcher
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. 'My.Computer.FileSystem.files
    6. watcher = New IO.FileSystemWatcher
    7. watcher.Path = My.Computer.FileSystem.SpecialDirectories.Desktop & "\"
    8. watcher.NotifyFilter = (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName)
    9. watcher.Filter = "*.txt"
    10. AddHandler watcher.Changed, AddressOf WChanged
    11. watcher.EnableRaisingEvents = True
    12. 'WChanged()
    13. End Sub
    14. Sub WChanged()
    15. RichTextBox1.Text = My.Computer.FileSystem.ReadAllText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\output.txt")
    16. End Sub
    17. End Class


    code geändert.
    nun gibt es ein fehlercode.

    Quellcode

    1. Eine Ausnahme (erste Chance) des Typs "System.InvalidOperationException" ist in System.Windows.Forms.dll aufgetreten.


    in der sub wchanged. mit der kann ich aba nix anfangen <;

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „backtothetoast“ ()

    backtothetoast schrieb:

    s handelt sich um ein c++ compiler.

    Und um welchen? Ich kenne keinen C++ Compiler welcher das nicht kann.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    backtothetoast schrieb:

    es handelt sich um ein c++ compiler.
    Hat der keine eigene Entwicklungsumgebung?
    Du kannst Deinem Projekt im Studio sagen, dass dieser Compiler verwendet werden soll (geht z.B. mit Qt).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wie heißt denn der Compiler und der c++-Dialekt, wer ist der Hersteller?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Private WithEvents watcher As IO.FileSystemWatcher
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. watcher = New IO.FileSystemWatcher("PFAD ZUM ORDNER", "DATEINAME") 'Dateiname kann auch als Filter fungieren ("*.txt")
    4. watcher.EnableRaisingEvents = True
    5. End Sub
    6. Sub WChanged(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) Handles watcher.Changed
    7. RichTextBox1.Text = My.Computer.FileSystem.ReadAllText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\output.txt")
    8. End Sub
    9. End Class
    Meine Code sieht genau so aus:

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private WithEvents watcher As IO.FileSystemWatcher
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. watcher = New IO.FileSystemWatcher(My.Computer.FileSystem.SpecialDirectories.Desktop, "\test.txt")
    6. End Sub
    7. Sub WChanged(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) Handles watcher.Changed
    8. RichTextBox1.Text = My.Computer.FileSystem.ReadAllText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\test.txt")
    9. End Sub
    10. End Class


    Die Textdatei speichere ich natürlich mit Strg + S ab.
    > Aus dem Code kannst du bestimmt den Namen der Textdatei erkennen -> test.txt

    > Vorerst auch nur so, da ich erstmal ein Problem lösen möchte.
    Ist aber nicht der gleiche Code. :P
    Du hast watcher.EnableRaisingEvents = True vergessen.

    Edit: Du hast ein Fehler bei den Parametern.
    watcher = New IO.FileSystemWatcher("PFAD ZUM ORDNER", "DATEINAME")
    Du hast aber:
    watcher = New IO.FileSystemWatcher(My.Computer.FileSystem.SpecialDirectories.Desktop, "\test.txt")

    Deine Datei soll: "\test.txt" heißen. Da "\" in Dateinamen ungültig ist, wirst du da niemals was finden.
    Nimm das "\" raus und fertig.


    Mfg.
    SAR