Форма Powershell: при закрытии удаляйте изображение, созданное формой - PullRequest
0 голосов
/ 28 марта 2020

У меня есть скрипт Powershell, который отображает System.Windows.Forms для обрезки аудиофайлов. Эта форма загружает звуковой сигнал, созданный сценарием.

Когда я закрываю форму, я хотел бы удалить этот файл формы волны.

Я пытался добавить это, но это не работает.

    $form.Controls.Remove($pictureBox)
    $form.Refresh()
    Remove-Item -Path $FilepathForWaveform -Force

Это также не работает:

     $form.Dispose()
     Remove-Item -Path $FilepathForWaveform -Force

Я видел этот ответ , но когда я его реализую, скрипт закрывается, не удаляя изображение .

Я использую Powershell 5.1

Весь мой сценарий здесь , и это соответствующие части:

ffmpeg -i  $file_name_complete -filter_complex "showwavespic=s=640x120" -frames:v 1  $DirectoryPath\"output.png" -y
$FilepathForWaveform = dir -LiteralPath $DirectoryPath\"output.png"

Add-Type -AssemblyName System.Windows.Forms
$form = New-Object System.Windows.Forms.Form

$img = [System.Drawing.Image]::Fromfile($FilepathForWaveform)
$pictureBox = new-object Windows.Forms.PictureBox
$pictureBox.Width = $img.Size.Width
$pictureBox.Height = $img.Size.Height
$pictureBox.Image = $img
$pictureBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom
$pictureBox.Location = "15, 200"
$form.controls.add($pictureBox)

$form.ShowDialog()

Теперь я Я могу удалить изображение, когда форма закрыта, но изображение не отображается:

$FilepathForWaveform = dir -LiteralPath $DirectoryPath\"output.png"
$img = Image.FromStream(new MemoryStream(File.ReadAllBytes("[$FilepathForWaveform]")))
$pictureBox = new-object Windows.Forms.PictureBox
$pictureBox.Image = $img
$form.controls.add($pictureBox)

$form.Add_Closing({
    $form.Controls.Remove($pictureBox)
    $pictureBox.Dispose()
    $form.Refresh()
    Remove-Item -Path $FilepathForWaveform -Force
})
$form.ShowDialog() | Out-Null
$form.Dispose()

Я также пробовал это на основе этой ссылки :

$img=[System.Drawing.Image]::FromStream([System.IO.MemoryStream]$FilepathForWaveform)
...