Question [Résolu] WinForm: impossible de libérer le fichier

Plus d'informations
il y a 15 ans 9 mois #7213 par blanc
Bonjour,
j'essaie de faire un bout de script pour afficher un jpg et il s'affiche. Mais powershell le maintient ouvert. Ce qui m'interdit de le lancer une seconde fois. Le remove-item en fin de script échoue. L'explorateur de fichiers signale une erreur plus compréhensible : verrouillé par powershell. Tant que je n'ai pas fermé la fenêtre PS je ne peux pas le détruire. Ni le re-créer.
Je supposais naïvement que le form.close (sortie avec appui sur ESC ou ENTER) libérait toutes les ressources et que le remove-item allait bien détruire le fichier. Or, il échoue et signale une erreur. Je ne comprends pas tout. Ou pire je ne sais pas faire un copier/coller.
[code:1]$cheminDuScript=Split-Path (Get-Variable MyInvocation ).Value.mycommand.path
$wshShell= New-Object -ComObject 'wscript.shell'
#$wshShell.popup(\"Début du script\",0,\"Debug !\", 32)
try{
# load Forms NameSpace
[void][System.Reflection.Assembly]::LoadWithPartialName(\"System.windows.forms\"«»)
[void][reflection.assembly]::LoadWithPartialName(\"System.Drawing\"«»)
#region Make the form
$frmMain = New-Object Windows.Forms.form
$frmMain.Size = New-Object System.Drawing.Size @(800,600)
$frmMain.text = \"test jpg\"
$frmMain.StartPosition = \"CenterScreen\"
#intercepteur de clavier
$FrmMain.KeyPreview = $True
$FrmMain.Add_KeyDown({if ($_.KeyCode -eq \"Enter\"«»)
{$FrmMain.Close()}})
$FrmMain.Add_KeyDown({if ($_.KeyCode -eq \"Escape\"«»)
{$FrmMain.Close()}})
#pictureBox : jpeg
#if ( !(Get-Module hyperv)) { Import-Module HyperV }
#get-vm
#Get-VMThumbnail -vm winpe64 -path \"$cheminDuScript\test\" -Width 320 -Height 240
Test-Path \"$cheminDuScript\test.jpg\"
$pictureBox=New-Object System.Windows.Forms.pictureBox
$pictureBox.Width=320
$pictureBox.Height=240
$pictureBox.image=[System.Drawing.image]::FromFile(\"$cheminDuScript\test.jpg\"«»)
# Form1
$frmMain.Controls.Add($pictureBox)
$frmMain.ClientSize = New-Object System.Drawing.Size(400, 270)
# Show the Form
$FrmMain.Add_Shown({$FrmMain.Activate()})
[void]$FrmMain.showdialog()
Remove-Item \"$cheminDuScript\test.jpg\" -force
}#fin du try
catch{
\"catch\"
}
finally{
\"finally : $error\"
}[/code:1]<br><br>Message édité par: Arnaud, à: 25/06/10 14:31

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #7215 par blanc
Ben c'était écrit ici, enfin... dans un coin qui n'a pas de rapport direct, mais écrit et c'est le principal pour moi :
www.powershell-scripting.com/index.php?o...;id=3192&catid=4
Pas facile de comprendre en lisant msdn que la méthode dispose s'applique à image et non à picturebox.
Bref.Trop nul.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #7222 par Laurent Dardenne
Salut,
noel écrit:

Pas facile de comprendre en lisant msdn que la méthode dispose s'applique à image et non à picturebox.

A l'avenir tu peux vérifier ce point de la manière suivante :
[code:1]
#Pour une variable
$UneVariable.GetType().GetInterfaces() -contains [System.IDisposable]
#True
#Pour un type
[System.Windows.Forms.pictureBox].GetInterfaces() -contains [System.IDisposable]
#True
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.037 secondes
Propulsé par Kunena