MediaElement fails after several plays.

Posted by basilkot on Stack Overflow See other posts from Stack Overflow or by basilkot
Published on 2010-01-14T14:32:55Z Indexed on 2010/03/17 0:51 UTC
Read the original article Hit count: 560

Filed under:
|
|
|

Hi!

I have a problem with MediaElement control. I've put six MediaElements on my form, then I start them and change played files by timer. After several times, these elements stop playing.

Here is the sample XAML:

<Grid>
<Grid.RowDefinitions>
    <RowDefinition Height="*" />
    <RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<MediaElement x:Name="element1" UnloadedBehavior="Close" LoadedBehavior="Manual" Grid.Column="0" Grid.Row="0" />
<MediaElement x:Name="element2" UnloadedBehavior="Close" LoadedBehavior="Manual" Grid.Column="1" Grid.Row="0" />
<MediaElement x:Name="element3" UnloadedBehavior="Close" LoadedBehavior="Manual" Grid.Column="2" Grid.Row="0" />
<MediaElement x:Name="element4" UnloadedBehavior="Close" LoadedBehavior="Manual" Grid.Column="0" Grid.Row="1" />
<MediaElement x:Name="element5" UnloadedBehavior="Close" LoadedBehavior="Manual" Grid.Column="1" Grid.Row="1" />
<MediaElement x:Name="element6" UnloadedBehavior="Close" LoadedBehavior="Manual" Grid.Column="2" Grid.Row="1" />

Here is the sample code:

// The code below repeats for each MediaElement

List<string> playlist1 = new List<string>()
{
    @"file1.wmv",
    @"file2.wmv",
    @"file3.wmv",
    @"file4.wmv"
};
DispatcherTimer timer1 = null;
int index1 = 0;
...
void Window1_Loaded(object sender, RoutedEventArgs e)
{
    timer1 = new DispatcherTimer();
    timer1.Tick += new EventHandler(timer1_Elapsed);
    timer1.Interval = TimeSpan.FromSeconds(10);
    element1.Source = new Uri(playlist1[index1]);
    timer1.Start();
    element1.Play();
    ...
}
void timer1_Elapsed(object sender, EventArgs e)
{
    Dispatcher.BeginInvoke(DispatcherPriority.Normal, (System.Threading.ThreadStart)delegate()
    {
        element1.Stop();
        element1.Close();
        timer1.Stop();
        index1++;
        if (index1 >= playlist1.Count)
        {
            index1 = 0;
        }
        element1.Source = new Uri(playlist1[index1]);
        timer1.Start();
        element1.Play();
    });
}

...

Does anybody have similar problems?

© Stack Overflow or respective owner

Related posts about wpf

Related posts about mediaelement