Laden...

Label wird erst am Ende einer langlaufenden Aktion aktualisiert

Erstellt von LSkywalker vor 13 Jahren Letzter Beitrag vor 13 Jahren 896 Views
Thema geschlossen
L
LSkywalker Themenstarter:in
2 Beiträge seit 2011
vor 13 Jahren
Label wird erst am Ende einer langlaufenden Aktion aktualisiert

Hallo,
ich habe folgendes Problem. Ich beschäftige mich derzeit mit einem kleinen Problem: In einem Form habe ich ein Textfeld, dass einen grünen Hintergrund bekommt, wenn man auf einen Button klickt; danach wird ein mp3-File abgespielt und anschließend (sprich: wenn das File beendet ist) bekommt das Label wieder einen schwarzen Hintergrund.

Nun ist es aber so, dass zuerst die mp3-Datei abgespielt wird und erst danach die Änderung am Label vorgenommen wird - vermute ich zumindest, denn ich bekomme von dieser Änderung nichts mit.
Ich erinnere mich an die Java-Methode SwingUtilities.InvokeLater() mit der ich eine gute Lösung für das Problem gefunden habe - gibt es auch eine Problemlösung für C#?

private WMPLib.WindowsMediaPlayer wmp = new WMPLib.WindowsMediaPlayer();
// blabla..
label.ForeColor = Color.LimeGreen;

wmp.URL = "./Includes/Sounds/testfile.mp3";
wmp.controls.play();

label.ForeColor = Color.Black;

mfg

1.552 Beiträge seit 2010
vor 13 Jahren

Hallo LSkywalker,
[FAQ] Warum blockiert mein GUI?
Lagere das Abspielen des Sounds in einen BackGroundWorker oder Thread aus, und wirf am Anfang und Ende ein Event damit die GUI das Label ändert.

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

L
LSkywalker Themenstarter:in
2 Beiträge seit 2011
vor 13 Jahren

Danke für den Tipp. Ich habe versucht es ähnlich umzusetzen:

private void playCorrectSound()
        {
            wmp.URL = "./Includes/Sounds/testfile.mp3";
            wmp.controls.play();
            this.Invoke((MethodInvoker)delegate()
            {
                updateGUI(); // Methode, um dem Label die schwarze Farbe zuzuweisen.
            });
        }

// .. andere Methode ..

label.ForeColor = Color.LimeGreen;

new Thread(playCorrectSound).Start();

Eigenartigerweise zeigt er die grüne Farbe nur für geschätze 0,1ms an. Liegt dies daran, dass ich für das Abspielen der mp3 die mciSendString-Methode von wmplib.dll verwende?

328 Beiträge seit 2006
vor 13 Jahren

[...] und wirf am Anfang und Ende ein **Event **damit die GUI das Label ändert. [...]

Robert Wachtel

http://blog.robertsoft.de

Thema geschlossen