2011-02-27 41 views
1

解決了一個問題,另一個問題:在C#程序中,我使用以下方法將標籤顏色設置爲綠色,然後播放mp3文件並最終將顏色設置爲黑色。 問題在於聲音似乎是在一個額外的線程中播放的,因此兩種顏色變化之間的時間太短(實際上,播放文件時應該有綠色)。MP3在不同的線程中播放

private void playSound() 
    { 
     label1.ForeColor = Color.LimeGreen; 
     Application.DoEvents(); 

     WMPLib.WindowsMediaPlayer wmp = new WMPLib.WindowsMediaPlayer(); 
     wmp.URL = @"C:\examplesound.mp3"; // duration about 30s 
     wmp.controls.play(); 

     label1.ForeColor = Color.Black; 
    } 

有什麼辦法可以強制標籤在播放mp3文件時保持綠色?

回答

3

當播放位於另一個線程中時,不要立即將顏色設置回黑色。

當前曲目結束時WMPLib發出一個PlayStateChange事件。

所以添加一個處理程序:

wmp.PlayStateChange += this.Player_PlayStateChange; 

private void Player_PlayStateChange(int newState) 
{ 
    if ((WMPLib.WMPPlayState)newState == WMPLib.WMPPlayState.wmppsStopped) 
    { 
     label1.ForeColor = Color.Black; 
    } 
} 

的頁面playState有值的列表:

8 - MediaEnded - 媒體項已完成播放。

您需要確保這是在UI線程上完成的。

+0

打敗我,但我會將newState轉換爲'WMPLib.WMPPlayState',並比較它而不是使用幻數。例如'if(WMPLib.WMPPlayState)newState == WMPLib.WMPPlayState.wmppsStopped)' – Alan 2011-02-27 17:56:23

+0

@Alan - 實際上。我正準備更新答案 – ChrisF 2011-02-27 17:58:31

0

嘗試掛鉤PlayStateChanged事件並將label1.ForeColor = Color.Black;放在那裏。

目前,您的代碼中沒有任何內容說明只有當它開始播放後,它才應該變爲黑色。