In Thread (static) auf GUI Element zugreifen, nur wie?

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    In Thread (static) auf GUI Element zugreifen, nur wie?

    Hallo leute,

    hoffe ihr könnt mir bei meinem Problem helfen.
    Ich will aus einem Prozess den Output auslesen lassen. Das funktioniert auch soweit.
    Nur sobald ich den Thread außerhalb meines z.B. void Button1_Click(....) deklariere beginnen die Probleme.
    Ich schaff es trotz ewiger google-suchen nicht das ganze (den Process p.outputdatarecieved) in meine richtextbox schreiben zu lassen...


    C#-Quellcode

    1. Thread server = new Thread(new ThreadStart(start));
    2. static Process p = new Process();
    3. private void button1_Click(object sender, EventArgs e)
    4. {
    5. server.Start();
    6. }
    7. private static void start()
    8. {
    9. p.StartInfo = new ProcessStartInfo("java.exe", "-jar minecraft_server.1.8.8_1.jar nogui");
    10. p.StartInfo.RedirectStandardOutput = true;
    11. //p.StartInfo.RedirectStandardInput = true;
    12. p.StartInfo.UseShellExecute = false;
    13. p.StartInfo.CreateNoWindow = true;
    14. p.OutputDataReceived += P_OutputDataReceived;
    15. p.Start();
    16. //p.BeginOutputReadLine();
    17. p.WaitForExit();
    18. }
    19. private static void P_OutputDataReceived(object sendingProcess, DataReceivedEventArgs outLine)
    20. {
    21. if (!String.IsNullOrEmpty(outLine.Data))
    22. {
    23. }
    24. }


    Schonmal vielen vielen dank für eure Antworten im vorraus.
    Grüße DaNeubi
    Ich bin auch nicht mehr so in NET unterwegs aber die Methoden start() und P_OutputDataReceived() sind private und static. Muss das so? Kommt mir ein bisschen spanisch vor denn Private Methoden kann man in C++ nur in der eigenen Klasse aufrufen.
    Software being "Done" is like lawn being "Mowed". (Jim Benson)

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

    Fakiz schrieb:

    Warum ist die Methode start den als static deklariert? Zu deinem Problem, such mal nach Control Invok


    start muss static sein, da Threadstart auf einen stativ void verwiesen werden muss wenn es außerhalb eines voids ist.
    und Control.Invoke funktioniert da nicht...

    DaNeubi schrieb:

    start muss static sein, da Threadstart auf einen stativ void verwiesen werden muss wenn es außerhalb eines voids ist.
    Streng genommen ergibt das keinen Sinn - was soll das sein: "ein ThreadStart ausserhalb eines voids"?
    Aber was immer du damit meinen magst - es ist nicht richtig.
    Und damit verweise ich nochmal auf post#4 - lass den static-Quatsch, und du hast eine bessere Chance, es hinzukriegen.