2017-10-04 2 views
1

비디오 또는 이미지 파일을 동적으로로드하는 WPF 응용 프로그램이 있습니다 (사용자의 선택에 따라 비디오 일 때 제대로 작동하고 비디오를 끝낼 때 MediaEnded 이벤트가 발생 함) 하지만 이미지를로드하면 MediaEnded 이벤트가 5 초 이내에 발생합니다. 프로그래밍 방식으로 기본값을 변경하거나 프로그래밍 방식으로 변경할 수 있습니까? 이 간격을 변경하거나 해당 옵션을 비활성화 할 수있는 속성이 있습니까? 일시 중지 할 수 있습니까? 특정 작업 때까지중재 된 이벤트가 시작되는 기본 시간 간격이 있습니까?

다음 속성을 다음과 같이 설정했습니다.

MediaControl1.LoadedBehavior = MediaState.Manual; 
MediaControl1.UnloadedBehavior = MediaState.Manual; 

답변

1

MediaElement은 Windows Media Player (또는 Windows Media Player에서 사용되는 것과 동일한 프레임 워크를 사용하는) (매우 얇은) 래퍼입니다. Windows Media Player에서 이미지를 열면 슬라이드 쇼처럼 (약 1 초 동안) 약 5 초 동안 "재생"됩니다. 그렇기 때문에 MediaEnded 이벤트가 5 초 만에 발생합니다. Windows Media Player는 해당 기간 동안 이미지로 슬라이드 쇼를 재생합니다. WPF에서 이것을 변경하는 방법이 있는지 의심 스럽습니다. (외부 프로그램 \ 프레임 워크의 동작이므로 MediaElement 자체와 관련이 없습니다.) Windows Media Player에서이를 변경하는 방법을 알지 못합니다. 방법 - 글로벌 효과가있을 것이며 클라이언트 컴퓨터를 그런 식으로 수정하고 싶지 않을 것입니다.

문제를 해결하려면 이미지를 표시하는 데 MediaElement을 사용하지 마십시오. Image 컨트롤을 사용하십시오. "슬라이드 쇼"가로드 된 후에 Pause 메소드로 MediaElement을 일시 중지하면 MediaEnded 이벤트가 발생하지 않습니다. 전체적으로 - 이미지에 실제로 MediaElement을 사용해야하는 유스 케이스를 상상할 수 없습니다.

+0

확실히 WMP가 아닙니다. 이것은 모두 밀 코어 (MilCore)에 의해 이루어졌으며 확실히 Media Foundation을 포장하고 있습니다. UseValueForDefault = True 및 Medium을 사용하여 [this from] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb787399(v=vs.85) .aspx)로 의심됩니다. 그러나 리버스 엔지니어링하기가 너무 어렵습니다. –

0

이미지를로드 할 때 미디어를 반복 할 수 있습니다.

void me_MediaEnded(object sender, EventArgs e) 
{ 
    //play video again 
    mediaElement.Position = new TimeSpan(0, 0, 1); 
    mediaElement.Play(); 
} 

는 또한이를 참조하십시오이 같은 MediaEnded 이벤트를 처리합니다. 도움이 될 수도 있습니다 : https://stackoverflow.com/a/3406857/5675763

관련 문제