Laden...

PictureBox Invoke wird nicht ausgeführt

Erstellt von darklight vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.284 Views
D
darklight Themenstarter:in
15 Beiträge seit 2012
vor 11 Jahren
PictureBox Invoke wird nicht ausgeführt

Guten Tag,

ich muss über einen anderen Thread ein Bild an eine PictureBox zuweisen.
Dies sollte über diesen Code realisiert werden:

private void AddPictureToPictureBox(Bitmap pic)
        {
            if (this.pictureBox1.InvokeRequired)
                this.pictureBox1.Invoke(new MethodInvoker(delegate { AddPictureToPictureBox(pic); }));
            else this.pictureBox1.Image = pic;
        }

Ich debugge in diesem Codeabschnitt die Zeile mit der If-Abfrage und dem else Teil.
Es sieht aber so aus: Es wird bemerkt das ein Invoke benötigt wird, der Debugger geht dann in die nächste Zeile, führt den Invoke aus, aber gelangt nie in den else Teil. In diesen sollte er ja nach einem erfolgreichen Invoke landen.

Ich hoffe ihr könnt mir meinen Fehler aufzeigen und mir helfen.

Mit freundlichen Grüßen
Darklight

C
258 Beiträge seit 2011
vor 11 Jahren

Ich kenne ein ähnliches Problem, warum das auftritt kann ich nicht sagen.

jedoch kommt es zu seltsamen verhalten wenn ich in einem Form per BeginInvoke versuche die aktuelle Operation nach hinten zu schieben bis ein UserControl in dem Form ein Invoke ausgeführt hat. Dabei ist es auch so das das Invoke nie ausgeführt wird während mein Form immer wieder mit BeginInvoke die selbe Methode aufruft.

Versuch einfach mal das Invoke auf das Form und nicht auf die Picturebox aufzurufen.

D
darklight Themenstarter:in
15 Beiträge seit 2012
vor 11 Jahren

Leider bringt auch dies nicht den gewünschten Erfolg.
Er bleibt genauso wie bei meiner vorherigen Lösungen an der gleichen Stelle hängen.

4.221 Beiträge seit 2005
vor 11 Jahren

Bleibt hängen... tönt nach Deadlock...

Wo (im UI-Thread) hast du den Thread gestartet und was machst Du dann im UI-Thread ? hast Du da ev. ein Thread.Join auf genau diesen Thread drin ? Dann würde der Join den UI-Thread blockieren und der Invoke kommt dann nicht rein...

Gib mal ein wenig mehr Code ...

Gruss
Programmierhans

PS: Wenn der Code stillsteht... schau mal im Threads-Window wo die einzelnen Threads stehen... steht davon einer auf einem .Join ?

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...