우선 전에 썼었던 MediaTimeline과 MediaClock 클래스를 사용하지않았다.

Timeline을 셋팅하고 그 상태서 Clock을 생성하고 그 Clock을 MediaElement와 연결했지만

연결을 하게되면 MediaElement로 제어가 되질않고  미디어엘리먼트의 클락의 컨트롤러로 제어를 해야됐다. 그리고  MediaElement에 position을 지정 해줄수 가 없었다. position을 임의로 지정하게 되면

미디어를 지정하는동안 클락을 변경할 수 없다 라는 오류가 난다.

이것을 해결하기위해서 여러 방법을 써봤는데 해결하지 못하였고

결국 MediaTImeline과 MediaClock을 사용하지 않는 방법을 사용하였다.

해결방법은

DispatcherTimer를 이용하였는데  우선 bool 변수를 하나 선언해서

매초마다 이벤트가 발생해서 미디어 -> 슬라이더바가  변경 될때와

슬라이더바가 움직여서 영상이 바뀔때가 겹치지않게 bool로 제어를 해주었다.


아래와같다~!

bool con = false;

//마우스를 떼면 false로 바뀌고 Tick이 다시 계속 실행된다.
private void timebar_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
      con = false;            
}        

//마우스를 클릭하면 true로 바뀌고
private void timebar_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
      con = true;
}

//클릭하면서 true로 바뀌었고  Tick이 발생안한다. 그 때 바를 움직여서 Position을 바꿔놓는다.
private void timebar_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
       if (con)
      {
       int SliderValue = (int)timebar.Value;

       TimeSpan ts = new TimeSpan(0, 0, 0, 0, SliderValue);

       mediaElement1.Position = ts;
       }
}

//초기값이 false이기 때문에 계속 실행된다.
void timer_Tick(object sender, EventArgs e)
{
    if (!con)
    {
        timebar.Value = mediaElement1.Position.TotalMilliseconds;   
              
        TimeSpan ts = new TimeSpan();
        ts = mediaElement1.Position;
                
        textBox1.Text = (string)ts.Seconds;
                
    }
}   


Posted by 아몰라

댓글을 달아 주세요

이전버튼 1 2 3 4 5 6 이전버튼