Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Label wird erst am Ende einer langlaufenden Aktion aktualisiert
LSkywalker
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

Label wird erst am Ende einer langlaufenden Aktion aktualisiert

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
xxMUROxx
myCSharp.de - Member

Avatar #avatar-3236.jpg


Dabei seit:
Beiträge: 1.552
Herkunft: Südtirol/Italien

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
LSkywalker
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
robert.wachtel
myCSharp.de - Member

Avatar #avatar-2287.gif


Dabei seit:
Beiträge: 328
Herkunft: Köln

beantworten | zitieren | melden

Zitat von xxMUROxx
[...] und wirf am Anfang und Ende ein Event damit die GUI das Label ändert. [...]
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von robert.wachtel am .
Robert Wachtel

http://blog.robertsoft.de
private Nachricht | Beiträge des Benutzers