2016-04-15 13 views
0

Ich muss eine Schleife erstellen, um viele mp3-Dateien anzusehen und ihre naturalDuration-Eigenschaft mit einem mediaElement zu erhalten. Das Problem ist, dass mediaElement einige Zeit braucht, um jede einzelne Datei zu laden und die Eigenschaft .source funktioniert wie ein asynchroner Prozess (glaube ich), weil ich zweimal auf den unteren Code klicken muss, um die Eigenschaft naturalDuration zu erhalten. Erstes Klicken Ich habe nur 00:00:00 Wert, zweites Clik gib mir echten Wert.Warten Sie, bis das Medienelement über eine NaturalDuration-Information verfügt

Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles button.Click 

    mediaElement.Source = New Uri("\\Mac\Home\Desktop\NOVEDADES01\AbrahamMateo-OldSchool.mp3") 
    textBlock.Text = mediaElement.NaturalDuration.ToString 

End Sub 

Wenn ich versuche, nach .Source-Anweisung zu warten, hält die Anwendung auf Schleife.

Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles button.Click 

    mediaElement.Source = New Uri("\\Mac\Home\Desktop\NOVEDADES01\AbrahamMateo-OldSchool.mp3") 
    Do 
    Loop Until mediaElement.NaturalDuration.TimeSpan.TotalSeconds > 0 
    textBlock.Text = mediaElement.NaturalDuration.ToString 

End Sub 

Ich habe auch .source durch einen Asynchron-Prozess und warte mediaOpenend Ereignis, aber es kann bis zum ersten Klick

endet nicht am Ende aussehen wie mediaElemento gesetzt versuchen, wie ich realen Wert der NaturalDuration bekommen könnte innerhalb eines einzelnen Prozesses oder einer Funktion direkt nach dem Festlegen der Eigenschaft .source und ohne die Datei abzuspielen? Vielen Dank !!

Antwort

0

Ok, spät und vielleicht nicht so elegant, aber das war meine Lösung für die Dauer einer MP3-Datei. Ich habe die MusicProperties-Klasse verwendet.

Public Function infoMP3 (elfichero As String) As String

Dim salida As String = "" 
    Dim miTask = Task.Run(Async Function() As Task(Of String) 
           Dim musicFile As StorageFile = Await StorageFile.GetFileFromPathAsync(elfichero) 
           Dim FileProperties As StorageItemContentProperties = musicFile.Properties 
           Dim musicFileProperties As MusicProperties = Await FileProperties.GetMusicPropertiesAsync() 
           Dim tiempo = musicFileProperties.Duration 
           Dim horas As String 
           If tiempo.Hours < 10 Then 
            horas = "0" & tiempo.Hours.ToString 
           Else 
            horas = tiempo.Hours.ToString 
           End If 
           Dim minutos As String 
           If tiempo.Minutes < 10 Then 
            minutos = "0" & tiempo.Minutes.ToString 
           Else 
            minutos = tiempo.Minutes.ToString 
           End If 
           Dim segundos As String 
           If tiempo.Seconds < 10 Then 
            segundos = "0" & tiempo.Seconds.ToString 
           Else 
            segundos = tiempo.Seconds.ToString 
           End If 
           Dim autor = musicFileProperties.Artist 
           Dim titulo = musicFileProperties.Title 

           Dim presalida As String = "[" & horas & ":" & minutos & ":" & segundos & "];[" & titulo & "];[" & autor & "] " & elfichero 
           Return presalida 
          End Function) 
    miTask.Wait() 
    salida = miTask.Result 
    Return salida 

End Function 

Um den Zugriff auf die Dateien später auf Windows 10 zu erhalten, müssen Sie die Berechtigung für die Dateien und/oder Ordner speichern. Tun Sie dies, wenn Sie sie auswählen.

... Dim listToken = Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.Add (RUTAS) ...

wo RUTAS ein Objekt SotorageFolder ist.