Autor Beitrag
GURKE deluxe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 91
Erhaltene Danke: 1

Win 7 Home Premium x64, Win XP Home Edition v2002
C# Microsoft Visual C# 2010 Express
BeitragVerfasst: Fr 01.10.10 15:43 
Hallo,
Ich habe ein Programm geschrieben welches eventuell mehrere Minuten braucht. Wenn dieser Prozess nun am laufen ist, kann ich mit dem Programm nichts anderes mehr machen.

Gibt es die Möglichkeit, den Fortschritt anzeigen zu lassen? Und kann man die Oberfläche getrennt berechnen lassen, das man diese u.a. noch bewegen, normal schließen, etc. kann?

Gruß
GURKE
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 01.10.10 16:04 
Ja, da gibt es mehrere Möglichkeiten.

Lies dir mal folgende 2 FAQ-Beiträge aus dem MyCSharp-Forums dazu durch:
Warum blockiert mein GUI?
Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

Gerade für einen Fortschrittsbalken bietet sich auch der 'BackgroundWorker' an...

Für diesen Beitrag haben gedankt: GURKE deluxe
GURKE deluxe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 91
Erhaltene Danke: 1

Win 7 Home Premium x64, Win XP Home Edition v2002
C# Microsoft Visual C# 2010 Express
BeitragVerfasst: Fr 01.10.10 22:32 
Moin Th69,
Danke für deine Antwort! Habe mir Teile durchgelesen. Und auch ein kleines Testprogramm geschrieben:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
        private void button2_Click(object sender, EventArgs e)
        {
            new Thread(TestDauerläufer).Start();
        }
        private void TestDauerläufer()
        {
            for (int i = 0; i < 100000; i++)
            {
                //for (int j = 0; j < 1000000; j++)
                //{
                    for (int k = 0; k < 1000000; k++)
                    {
                        int[] ABC = new int[10000];
                    }
                //}
                //progressBar1.Value = i;
                this.Invoke(new MethodInvoker(DoCheapGuiAccess));
            }
        }
        private void DoCheapGuiAccess()
        {
            progressBar1.Value = progressBar1.Value + 1;
        }


Funktioniert tatsächlich alles so wie es soll! Danke nochmals!

Gruß
GURKE

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
GURKE deluxe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 91
Erhaltene Danke: 1

Win 7 Home Premium x64, Win XP Home Edition v2002
C# Microsoft Visual C# 2010 Express
BeitragVerfasst: Sa 02.10.10 09:28 
So, ich bins nochmal.
Ich habe nun ein Problem mit dem Code:
Mein kompletter Zeitfressender Code steht nun im Bereich wo hier die beiden Schleifen stehen. Dieser Code braucht einige Informationen von der Oberfläche. Wenn ich den Code starte kommt der Fehler der schon beschrieben wurde ("Unzulässiger threadübergreifender Vorgang" bzw. "Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement 'Name des Steuerelements' erfolgte nicht von dem Thread aus, in dem das Steuerelement erstellt wurde." (*)).

Wie komme ich nun an Daten der Oberfläche?

Gruß
GURKE
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 02.10.10 12:08 
Übergebe sie an den Thread, bevor du ihn startest.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 02.10.10 22:35 
Und zwar über die Überladungen des Thread-Konstruktors und Start, über die du ein Objekt übergeben kannst :) . Über anonyme Methoden ging es auch noch einfacher.

_________________
>λ=
GURKE deluxe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 91
Erhaltene Danke: 1

Win 7 Home Premium x64, Win XP Home Edition v2002
C# Microsoft Visual C# 2010 Express
BeitragVerfasst: So 10.10.10 19:41 
So lange arbeite ich nocht nicht mit C# ;)

Also was soll ich jetzt genau machen? Am besten mit Beispiele :D.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 10.10.10 19:48 
Thread-Tutorials sollte es eigentlich genug im Internet geben.