2011-02-27 4 views
0

작은 문제로 둘러 보겠습니다. C# -program에서 색상은 처음에는 검정색입니다. MP3 파일이 재생되는 동안 레이블은 녹색으로 표시되고 음악이 끝나면 레이블의 색상은 검정색이어야합니다.C에서 레이블 업데이트 ere mp3가 재생됩니다.

이제 음악이 재생되지만 레이블이 업데이트되지 않습니다. 여러 코드 예제를 사용했지만 어느 것도 작동하지 않습니다. 그게 이벤트와 호출과 관련이 있다는 것을 알지만 어떻게 작동하도록이 코드를 변경해야합니까? 자바에서 나는 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; 
     } 
    } 

어떤 도움을 크게 감사합니다!

답변

0

색상을 변경 한 후 Application.DoEvents();을 추가하십시오. 난 당신이

Application.DoEvents(); 

희망이 도움이 사용할 수있는 하나 개의 스레드를 사용하는 동안 업데이트하는 것이 훨씬하지만 GUI를 얻기에 스레드를 사용하지 않는 한

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

: 내 생각에 그것은 뭔가를 작성하는 가장 좋은 것입니다 .

0

감사합니다. 작동 중입니다. 테스트 목적으로 wmp-object의 play-method를 Thread.Sleep (200)으로 대체했습니다. 원하는대로 작동합니다. Thread.Sleep() - 함수를 오디오 파일을 재생하는 명령으로 바꾸면 불행히도이 기능이 작동하지 않습니다. 나는 오디오 파일이 별도의 스레드에서 재생된다고 가정합니다.

당연히 나는 이것을 Thread.Sleep()을 play() 메소드 다음에 추가하여 무시할 수 있지만, 이것을 수행하는 더 좋은 방법이 있습니까?

+0

'playSound' 함수가 비동기 적으로 사운드를 재생합니까? 만약 당신이 항상'next '를 호출하기 때문에 항상 검은 라벨을 붙일 것입니다. –

+0

'playSound' 함수는 winmm.dll의'mciSendString'을 통해 사운드를 재생합니다 -이 함수가 오디오 파일을 비동기 적으로 재생하는지 여부는 모르겠습니다. – lukew

관련 문제