Autor Beitrag
pee
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 05.02.11 19:48 
Hi,
Ich möchte meine foreach Schleife mit Parallel.Foreach(TPL) durchlaufen lassen. Dazu soll nach jedem Schleifendurchlauf mein ProgessBar - Wert erhöht werden.
Hier kommt folgende Fehlermeldung: System.InvalidOperationException : Invoke oder BeginInvoke kann für ein Steuerelement erst aufgerufen werden, wenn das Fensterhandle erstellt wurde.
P.S.: Ja, ich habe das Forum durchsucht und komme auf kein zu meinem Problem passendes Ergebnis. Vielen Dank im Voraus.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
public void methode(args)
    {
  //Thread Schleife mit TPL
Parallel.ForEach(arg1, arg2 =>
            {
              //Abarbeitung der Schleife …
    //Aufruf der ProgressBar - Methode
                prozessLeiste();
            });
    }
       
public void prozessLeiste()
    {
        if (progressBar1.InvokeRequired)
        { progressBar1.Invoke(new MethodInvoker(prozessLeiste)); }
        else { progressBar1.Value++; }
    }
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 05.02.11 19:49 
Hallo und :welcome:!

Das hört sich an, als würdest Du die Methode aufrufen, bevor das Fenster erstellt wurde. Wo rufst Du die Methode auf?

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
pee Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 05.02.11 20:05 
Meine Form enthält Knopf und ProgressBar (u.a.). Per Knopf wird noch eine andere Methode aufgerufen, die die Argumente für die genannte Methode liefert und diese aufruft.
Vielleicht ist die Information noch dienlich, dass die ProgressBar bis zur Hälfte läuft (maxvalue = Anzahl der Argumente, die in der Schleife abgearbeitet werden) und die Applikation danach abschmiert(woraufhin die Exception ausgelöst wird).
pee Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 06.02.11 19:01 
*push*
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 06.02.11 19:11 
Da die Exception eben wirklich nur geworfen werden sollte, während das Control erstellt wird, kommen wir ohne ein Beispiel-Projekt hier glaube ich nicht mehr weiter.

_________________
>λ=
pee Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 07.02.11 13:41 
Hier das Beispiel als Projektdatei.
Einloggen, um Attachments anzusehen!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 07.02.11 15:54 
Eine Exception kann ich damit nicht reproduzieren, nur den hier beschriebenen Deadlock.

_________________
>λ=

Für diesen Beitrag haben gedankt: pee
pee Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 07.02.11 18:11 
Danke. Invoke mit BeginInvoke getauscht, jetzt läuft es.