我有线问题,或者至少我找不到任何解决方案:)
在wpf应用程序中,我在加载窗口时发生了一个耗时的过程。在此期间,我使用包含MediaElement
的边框覆盖我的窗口,其中LoadedBehavior设置为Play
。耗时的流程在BackgroundWorker
中运行,一旦完成,我将叠加层的属性Visible
设置为Hidden
。
当我的应用程序启动时,叠加层会很好地显示,但不会显示MediaElement
(这是一个动画gif)。但是,当我将叠加Visible属性设置为Visible之后,gif渲染得很好。
我的问题是,为什么第一次没有显示gif?此外,只有在BackgroundWorker结束后才会触发MediaOpened事件....
代码背后:
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>