在加载的窗口上播放mediaelement

本文关键字:播放 mediaelement 窗口 加载 | 更新日期: 2023-09-27 18:05:42

我有一个有线问题,或者至少我没有找到任何解决方案:)在wpf应用程序中,加载窗口时发生了一个耗时的过程。在此期间,我用包含MediaElement的边界覆盖我的窗口,其中LoadedBehavior设置为Play。耗时的过程在BackgroundWorker中运行,一旦完成,我将覆盖的Visible属性设置为Hidden

当我的应用程序启动时,覆盖显示得很好,但MediaElement(这是一个动画gif)不显示。然而,当我将叠加可见属性设置为可见之后,gif渲染得很好。

我的问题是,为什么gif没有第一次显示?此外,MediaOpened事件仅在BackgroundWorker结束后触发....

代码:

  public MainWindow()
  {
     InitializeComponent();
     //BackgroundWorker
     bckgndWorker = new BackgroundWorker();
     bckgndWorker.DoWork += new DoWorkEventHandler(bg_DoWork);
     bckgndWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bg_RunWorkerCompleted);
  }
  void bckgndWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  {
     this.ModalDialog.Visibility = System.Windows.Visibility.Hidden;
  }
  void bckgndWorker_DoWork(object sender, DoWorkEventArgs e)
  {
     //Do time consuming work
  }
  private void Window_Loaded(object sender, RoutedEventArgs e)
  {
     this.ModalDialog.Visibility = System.Windows.Visibility.Visible;
     this.bckgndWorke.RunWorkerAsync();     
  }
  private void myGif_MediaEnded(object sender, RoutedEventArgs e)
  {
     this.myGif.Position = new TimeSpan(0, 0, 1);
     this.myGif.Play();
  }
  private void myGif_MediaOpened(object sender, RoutedEventArgs e)
  {
     MessageBox.Show("test");
  }
  private void button1_Click(object sender, RoutedEventArgs e)
  {
     this.ModalDialog.Visibility = System.Windows.Visibility.Visible;
  }

XAML:

  <Grid>
     <Button Content="Button" Name="button1" Click="button1_Click" />
     <Border Background="#90000000" Name="ModalDialog">
        <MediaElement Name="myGif" UnloadedBehavior="Manual" LoadedBehavior="Play" 
                  Stretch="Fill" Source="ajax-loader.gif" MediaEnded="myGif_MediaEnded" Width="200" Height="130" MediaOpened="myGif_MediaOpened" />
     </Border>
  </Grid>    

在加载的窗口上播放mediaelement

我正在使用这个库成功地在WPF上播放gif文件:

http://wpfanimatedgif.codeplex.com/

我希望它也能帮助你。