Обновите ярлык в C # прежде чем проиграть mp3 - PullRequest
0 голосов
/ 27 февраля 2011

Я возился с маленькой проблемой.В C # -программе у меня есть метка, цвет которой изначально черный.Пока воспроизводится MP3-файл, метка приобретает зеленый цвет, а после окончания музыки цвет метки должен быть черным.

Теперь музыка воспроизводится, но метка не получаетсяобновлено.Я использовал несколько примеров кода, но ни один из них не работает.Я знаю, что это как-то связано с событиями и вызовами, но как мне изменить этот код, чтобы он работал?В Java я использую метод SwingUtilities.InvokeLater (), но, насколько мне известно, в C # нет аналога.

delegate void LabelUpdate();

private void check()
    {
        new Thread(new ThreadStart(updateLabel)).Start();
        playSound();
        next(); // Used to set the label-color to black
    }

private void updateLabel()
    {
        if (label1.InvokeRequired)
        {
            UpdateBox d = new LabelUpdate(updateLabel);
            this.Invoke(d);    
        }
        else
        {
            label1.ForeColor = Color.Green;
        }
    }

Любая помощь очень ценится!

Ответы [ 3 ]

0 голосов
/ 27 февраля 2011

Я не очень много использовал потоки, но чтобы получить графический интерфейс для обновления при использовании одного потока, вы можете использовать

Application.DoEvents();

Надеюсь, это поможет.

0 голосов
/ 27 февраля 2011

Спасибо, это работает. Я заменил play-метод объекта wmp на Thread.Sleep (200), для целей тестирования - он работает как нужно. К сожалению, это не работает, если заменить функцию Thread.Sleep () командами для воспроизведения аудио-файла. Я предполагаю, что аудио-файл воспроизводится в отдельном потоке.

Конечно, я мог бы игнорировать это, добавив Thread.Sleep () после метода play (), но есть ли лучший способ сделать это?

0 голосов
/ 27 февраля 2011

Попробуйте добавить Application.DoEvents(); после смены цвета. На мой взгляд, было бы лучше написать что-то вроде:

    label1.ForeColor = Color.Green;
    Application.DoEvents();
    playSound();
    label1.ForeColor = Color.Black;
...