2012-10-20 1 views
1

나는 App.xaml.cs이 있습니다홀수 파일 연결 처리 버그

protected override async void OnNavigatedTo(NavigationEventArgs e) 
{ 
    FileActivatedEventArgs filesArgs = (FileActivatedEventArgs)e.Parameter; 
    StorageFile file = (StorageFile)filesArgs.Files[0]; 
    mc.SetSource(await file.OpenReadAsync(), file.ContentType); 
    mc.Play(); 
} 

그리고이 MainPage.xaml에 :

protected override void OnFileActivated(FileActivatedEventArgs args) 
{ 
    Window.Current.Content = new Frame(); 
    ((Frame)Window.Current.Content).Navigate(typeof(MainPage), args); 
    Window.Current.Activate(); 
} 

MainPage.xaml.cs

<MediaElement x:Name="mc" /> 

을 지금, 나는이 직면하고 아주 이상한 문제. 내 응용 프로그램과 .MP4 파일을 연결했습니다. 파일을 열 때마다 즉시 재생되지 않습니다. 예를 들면.

  1. 나는 a.mp4을 열어도 재생되지 않으며 앱을 닫지 않습니다.
  2. b.mp4을 열어도 재생되지 않으며 앱을 닫지 않습니다.
  3. 그런 다음 a.mp4을 열면 재생됩니다. 그렇지 않으면 다시 시도하고 재생됩니다. 이제 MP4 파일을 열면 앱을 종료 할 때까지 아무런 문제없이 재생됩니다.

그래서,이 해결 방법은 가끔 작동합니다

protected override async void OnNavigatedTo(NavigationEventArgs e) 
{ 
    FileActivatedEventArgs filesArgs = (FileActivatedEventArgs)e.Parameter; 
    StorageFile file = (StorageFile)filesArgs.Files[0]; 
    StorageFile file2 = (StorageFile)filesArgs.Files[0]; 
    mc.SetSource(await file2.OpenReadAsync(), file2.ContentType); 
    mc.SetSource(await file2.OpenReadAsync(), file2.ContentType); 
    mc.Play(); 
} 

사람이 알고 있나요가 해결하지 않고 작동하지 않는 이유는 무엇입니까?

답변

1

컨트롤이 초기화되거나 완전히로드되기 전에 소스를 설정하고 재생을 일찍 시작하면 파일이 재생되지 않는 것처럼 보입니다. 이것이 앱이 이미로드 된 이후의 통화에서 작동하고 첫 번째 통화에서 가끔씩 작동하는 이유입니다. 나는 간단한 응용 프로그램을 만들었고 대부분의 시도를 문제를 재현 할 수 있었다.

재생을 시작하기 전에 항상 MediaElement이로드 될 때까지 기다리는 간단한 해결 방법을 시도했지만 문제가 사라진 것 같습니다. 12 개가 넘는 호출에서 재생할 수 없었습니다. 여기

내가 무슨 짓을했는지의 :

에서 MainPage.xaml :

<MediaElement x:Name="mc" Loaded="mc_Loaded" /> 

MainPage.xaml.cs를

bool loaded = false; 
Task task = new Task(() => {}); 

private void mc_Loaded(object sender, RoutedEventArgs e) 
{ 
    loaded = true; 
    task.Start(); 
} 

protected override async void OnNavigatedTo(NavigationEventArgs e) 
{ 
    FileActivatedEventArgs filesArgs = (FileActivatedEventArgs)e.Parameter; 
    StorageFile file = (StorageFile)filesArgs.Files[0]; 
    if (!loaded) 
     await task; 
    mc.SetSource(await file.OpenReadAsync(), file.ContentType); 
    mc.Play(); 
} 

내가 정말 내 솔루션처럼 만 기반으로하지 않기 때문에 추측 및 경험적 테스트에 대한 것이지만 준비가되기 전에 MediaElement에 일어날 일을 설명하는 문서를 찾을 수 없습니다.

+0

@Programmer Core 2 Duo 6400에서 테스트했습니다. –

+0

@Programmer'MediaPlayer '를'MediaElement '가있는 페이지에서 호출하여 사용하는 경우 동일한 상황이 발생할 수 있다고 생각하지 않습니다. 나오다. 'MediaElement'는 페이지로드 과정에서로드되고,'FilePicker'를 열면 페이지가 이미로드됩니다. 버그 일 수도 있고 최소한 문서화되지 않은 기능 일 수도 있습니다. [MSDN 포럼] (http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp)에 문제를 게시하면 Microsoft의 많은 사람들이 거기에 있습니다. 또는 [Microsoft Connect] (https://connect.microsoft.com/VisualStudio)에서도 가능합니다. –

+0

@Programmer 제안대로 'MediaOpened' 이벤트를 사용해 보셨습니까? 그것은 당신의 문제를 해결합니까? –