none
wpf mit timer und background thread RRS feed

  • Frage

  • Hallo, 

    ich versuche ein CLI Tool alle paar Sekunden als Background Thread zu starten. 
    Allerdings startet der Process nicht. Ich weiß leider nicht was ich falsch mache, hier der Code: 

     
    private void worker_DoWork(object sender, DoWorkEventArgs e)
            {
    ProcessStartInfo processStartInfo = new ProcessStartInfo("ipconfig");
    processStartInfo.UseShellExecute = false;
    processStartInfo.RedirectStandardInput = true;
    processStartInfo.RedirectStandardOutput = true;
    Process process = new Process();
    process.StartInfo = processStartInfo;
    process.Start();
    StreamReader reader = process.StandardOutput;
    string result = reader.ReadToEnd();
    textBlockResult.Text = result;
            }
    
    private void evaluateLoad(object sender, EventArgs e)
    {
    BackgroundWorker worker = new BackgroundWorker();
    worker.WorkerReportsProgress = true;
    worker.WorkerSupportsCancellation = true;
    worker.DoWork += new DoWorkEventHandler(worker_DoWork);
    }
    
    private void LoadDisplay_Loaded(object sender, RoutedEventArgs e)
    {
    DispatcherTimer timer = new DispatcherTimer();
    timer.Interval = TimeSpan.FromSeconds(1);
    timer.Tick += evaluateLoad;
    timer.Start();
    }
    Danke!

    Montag, 11. August 2014 10:57

Antworten

Alle Antworten

  • Hi,
    Du musst den worker auch starten.

    --
    Peter

    • Als Antwort markiert pmatula Dienstag, 12. August 2014 07:36
    Montag, 11. August 2014 12:44
  • Ein sehr guter Hinweis, ups. 

    Aber nach dem Starten hab ich 2 Probleme: 

    1: poppt immer so ein schwarzes CMD Fenster auf, da ich ja ein CLI Tool starte (nehm ich an), kann ich das unterbinden? Das ist etwas nervig :-/ 

    2: Wird der Inhalt nicht mehr auf WPF TextBlock geschrieben, ich habe schon gelesen, dass es nicht direkt möglich ist von einem Background Thread auf die GUI zu schreiben, allerdings hab ich noch keine schöne elegante Lösung gefunden, damit ich das trotzdem kann. 


    Danke!!

    Montag, 11. August 2014 12:56
  • Hallo,

    zu 1.)
    siehe WLAN ohne sichtbares cmd-Fenster ein- ausschalten

    zu 2.)
    Dafür brauchst du in WPF den Dispatcher:

    this.Dispatcher.Invoke(() =>
    {
        //Führe hier deinen zur GUI synchronen Code aus
    });
    Beachte, das alles was darin ausgeführt wird, nicht mehr asynchron läuft.


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert pmatula Dienstag, 12. August 2014 07:36
    Montag, 11. August 2014 15:42
    Moderator
  • Danke, beide Tipps funktionieren exzellent. 
    Dienstag, 12. August 2014 07:36