Question
[Résolu] WinForm: impossible de libérer le fichier
- blanc
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 54
- Remerciements reçus 0
il y a 15 ans 9 mois #7213
par blanc
[Résolu] WinForm: impossible de libérer le fichier a été créé 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
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.
- blanc
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 54
- Remerciements reçus 0
il y a 15 ans 9 mois #7215
par blanc
Réponse de blanc sur le sujet Re:picturebox.image: impossible de libérer le fichier
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.
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 9 mois #7222
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:picturebox.image: impossible de libérer le fichier
Salut,
noel écrit:
[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]
noel écrit:
A l'avenir tu peux vérifier ce point de la manière suivante :Pas facile de comprendre en lisant msdn que la méthode dispose s'applique à image et non à picturebox.
[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
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] WinForm: impossible de libérer le fichier