Я столкнулся с проблемой, которую я не могу решить или понять, играя в Musi c из Powershell, я сделал WPF GUI поверх сценария mys Powershell. Все работает отлично, за исключением того, что когда я нажимаю кнопку воспроизведения musi c, я запускаю musi c, но через несколько секунд останавливается. Или при наведении мыши на WPF GUI музыка c останавливается, и я не могу ее решить. Когда я кидаю код для воспроизведения музыки c в проекте, он работает безупречно, только когда я назначаю ему кнопку, начинаются проблемы.
Итак, я сделал урезанную версию с простой старой формой и Кнопка ничего больше, сделал событие add_Click для подключения кнопки к коду и снова протестировал. Снова та же проблема: musi c перестает играть либо через несколько секунд, либо когда вы наводите указатель мыши на форму.
Теперь у меня по-прежнему висит старая машина Windows 7 с Powershell V2 на ней, и угадайте, что сработало безупречно! затем я обновил Powershell v2 до V5 на этой машине, и у меня возникла та же проблема, что и на ноутбуке с Win 10 (1909 с PS 5.1), поэтому с Powershell между V2 и V2 что-то изменилось, что вызывает такое поведение, но я не могу найти, что ...
Некоторые примеры, когда я добавляю эти строки кода в проект, он работает:
Add-Type -AssemblyName presentationcore
$location = (C:\users\myuserid\test.mp3)
$PlaySound = New-Object System.Windows.Media.MediaPlayer
$PlaySound.open($location)
$PlaySound.Play()
Но как только я назначаю ему кнопку, появляется проблема, как описано выше
Так что раздели все до голых костей, чтобы исключить как можно больше:
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
Add-Type -AssemblyName presentationcore
# Build Form
$Form = New-Object System.Windows.Forms.Form
$Form.Text = "My Form"
$Form.Size = New-Object System.Drawing.Size(200,200)
$Form.StartPosition = "CenterScreen"
$Form.Topmost = $True
# Add Button
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Size(35,35)
$Button.Size = New-Object System.Drawing.Size(120,23)
$Button.Text = "Play music"
$Form.Controls.Add($Button)
#Add Button event
$Button.Add_Click({
$location = 'D:\test\test.mp3'
$PlaySound = New-Object System.Windows.Media.MediaPlayer
$PlaySound.open($location)
$PlaySound.Play()
})
#Show the Form
$form.ShowDialog()| Out-Null
Так что при изменении размера формы при воспроизведении музыки c она остановится в 95% случаев , Но когда я добавляю код для воспроизведения музыки c без кнопки, как эта, она никогда не ломается ..
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
Add-Type -AssemblyName presentationcore
# Build Form
$Form = New-Object System.Windows.Forms.Form
$Form.Text = "My Form"
$Form.Size = New-Object System.Drawing.Size(200,200)
$Form.StartPosition = "CenterScreen"
$Form.Topmost = $True
# Add Button
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Size(35,35)
$Button.Size = New-Object System.Drawing.Size(120,23)
$Button.Text = "Play music"
$Form.Controls.Add($Button)
#Add Button event
$Button.Add_Click({
#Button now does nothing.. and music plays without breaking...ever
})
#Now it will always play to the end no matter what :-S
$location = 'D:\test\test.mp3'
$PlaySound = New-Object System.Windows.Media.MediaPlayer
$PlaySound.open($location)
$PlaySound.Play()
#Show the Form
$form.ShowDialog()| Out-Null
Надеюсь, кто-нибудь ответит мне на этот вопрос, искал и форумы для решения но я не могу найти его, спасибо заранее!
Редактировать, я сам решил проблему, хитрость заключается в том, чтобы загрузить плеер в начале вашего сценария, как это:
#Clear the Console
CLS
#Determine Script location
$SCRIPT_PARENT = Split-Path -Parent $MyInvocation.MyCommand.Definition
#Add in the presentation core
Add-Type -AssemblyName presentationframework, presentationcore
#Load music player and set location here!
$location = ($SCRIPT_PARENT + "\Music.mp3")
$PlaySound = New-Object System.Windows.Media.MediaPlayer
###############################################################
# here comes a whole lot of code (XAML for WPF GUI etc etc) #
###############################################################
# Then in your event system only put:
#Play button action
$MainGUI.Playmusic.add_Click({
#Open file and play music
$PlaySound.open($location)
$PlaySound.Play()
})
Это решена игровая проблема на 100%: -)