Mein Programm sollte ein Video abspielen, wenn der Benutzer die 'Play'-Taste drückt. Während dies normalerweise geschieht, wird beim ersten Drücken des "Play" -Knopfes nichts passieren.'MediaElement.SetSource()' wird nicht konsistent aktualisiert
ich auf den folgenden Code verfolgt habe diese Fehler zurück, die mein Media ‚VideoPlayer-‘ setzt:
public void playVideo_Tapped(object sender, TappedRoutedEventArgs e)
{
setUpVideo();
VideoPlayer.Play();
}
public async void setUpVideo()
{
if(vm == null) return;
StorageFile videoFile = vm.videoFile;
if (videoFile == null || !videoFile.ContentType.Equals("video/mp4")) return;
using (IRandomAccessStream fileStream = await videoFile.OpenAsync(FileAccessMode.Read))
{
VideoPlayer.SetSource(fileStream, videoFile.ContentType);
}
}
Der Täter scheint am Ende die ‚SetSource()‘ Methode. Die einzige Variable, die sich vom ersten Klick von "Play" zum nächsten ändert, ist die Variable "VideoPlayer.PlayToSource", die von null auf einen realen Wert geändert wird.
(Als Randbemerkung, die Variable ‚VideoPlayer.CurrentState‘ ändert sich auch von ‚Geschlossen‘ auf ‚Öffnen‘, sondern setzt sich auf ‚geschlossen‘ vor dem zweiten Klick. Nur ‚PlayToSource‘ ändert die Funktionalität.)
ich dachte, dass ich, indem sie diese in meinem ersten Verfahren eine schnelle Lösung tun könnte:
setUpVideo();
setUpVideo();
VideoPlayer.Play();
Nicht groß Code, aber es sollte die Dinge richtig stellen, nicht wahr? Nee! Dies verursacht eine NullReferenceException. Beim zweiten Aufruf von 'setUpVideo()' finde ich, dass 'PlayToSource' immer noch einen Wert hat und 'VideoPlayer.CurrentState' immernoch auf 'Öffnen' eingestellt ist, was irgendwie die NullReferenceException auslöst.
Ich erwarte die Lösung eines der folgenden Dinge zu sein:
1.) ‚VideoPlayer.PlayToSource‘ auf dem ersten Klick vor ‚SetSource‘ aufrufen.
2.) Setzen Sie in der Schnelleinstellung "VideoPlayer.CurrentState" zwischen den Aufrufen auf "Geschlossen" zurück.
3.) Eine andere Sache, die imitiert, was der erste Klick tut.
Natürlich beinhalten beide meine Ideen, eine schreibgeschützte Variable zu ändern. Wo bleibe ich stecken. Ich werde den XAML-Code für eine gute Maßnahme umfassen, aber ich bin zuversichtlich, dass es die Methode ‚SetSource‘ ist, dass die Wurzel meiner Probleme ist:
<Grid x:Name="VideoViewerParentGrid" Background="DarkGreen" Height="{Binding VideoViewerParentGridHeight }" Width="{Binding VideoViewerParentGridWidth}">
<MediaElement x:Name="VideoPlayer" HorizontalAlignment="Center" VerticalAlignment="Bottom" Stretch="Uniform"
Visibility="{Binding VideoVisibility, Converter={StaticResource visibilityConverter}}"/>
<Button Style="{StaticResource BackButtonStyle}" Tapped="VideoViewerClose_Tapped" HorizontalAlignment="Left" VerticalAlignment="Top"/>
<Button Name="Play_Button" Content="Play Video" FontSize="26" Tapped="playVideo_Tapped"
VerticalAlignment="Top" HorizontalAlignment="Left" Height="60" Width="180" Margin="0,80,0,0"/>
</Grid>
---- ---- UPDATE
Etwas mehr Stochern hat ergeben, dass 'VideoPlayer.CurrentState' beim ersten Klick niemals den Status 'Playing' erreicht, sondern von 'Opening' wieder zurück zu 'Closed' geht. Bei nachfolgenden Klicks wird dies nicht ausgeführt, solange das Programm ausgeführt wird. Untersucht immer noch die Ursache dafür.
ich es zugegeben, aber leider überhaupt keine Veränderung gibt es, wie es funktioniert. –