微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Powershell ISE 5.1-WindowsMediaPlayer类-事件未触发

如何解决Powershell ISE 5.1-WindowsMediaPlayer类-事件未触发

有人知道如何触发WindowsMediaPlayer类的MediaEnded事件吗?该事件已注册,但未触发。这不是操作的问题,因为我尝试使用Out-file输出结果。我可以使用Register-ObjectEvent命令从Start-Job触发事件,但是由于某些原因,MediaPlayer不想触发事件。

cls
Unregister-Event *
Add-Type -AssemblyName PresentationCore 
$Player = [System.Windows.Media.MediaPlayer]::new()
$path = "D:\minesweeper\Sound\Sounds\Bomb.wav"
$file = (Get-Item $path)
$Player.Open($file.FullName)
$player.Play()
$null = Register-ObjectEvent -InputObject $Player -EventName MediaEnded -Action {write-host "$(Get-Date)"}
Get-EventSubscriber

解决方法

这实际上不是PowerShell代码或特定问题,如下所述:

C# MediaPlayer.MediaEnded event not firing

但是这里...

我正在尝试使用“ MediaEnded”事件句柄计算出 声音文件已结束,然后移至下一个声音文件。

powershell 'system.windows.media.mediaplayer' Register-ObjectEvent

...是一种解决方法。

Add-Type -AssemblyName PresentationCore 
$_MediaPlayer = New-Object System.Windows.Media.MediaPlayer 
$_MusicFolder = 'C:\Users\Making JESUS Proud\Music'
$_MusicFiles = Get-ChildItem -path $_MusicFolder -include *.mp3 -recurse
$duration = $null
foreach($_file in $_MusicFiles){ 
     "Playing $($_file.BaseName)"
     [uri]$_song = $_file.FullName
     do {
        $_MediaPlayer.Open($_song)
        $_songDuration = $_MediaPlayer.NaturalDuration.TimeSpan.TotalMilliseconds
     }
     until ($_songDuration)
     $_MediaPlayer.Volume = 1
     $_MediaPlayer.Play()
     Start-Sleep -Milliseconds $_songDuration
     $_MediaPlayer.Stop()
     $_MediaPlayer.Close()
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。