[VB.NET]Picturebox resources vrijgeven hoe?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 11-07 20:53
Ik heb een applicatie geschreven die een tijdelijke directory aanmaakt en daar een aantal images in plaatst. Een aantal van die images komen in 5 pictureboxes te staan. Als ik nu de form met die pictureboxes afsluit, dan wil ik die directory deleten op de volgende manier:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    Private Sub Form1_Closed(ByVal sender As Object, ByVal e As_
    System.EventArgs) Handles MyBase.Closed
        If Directory.Exists(TempPath) Then
            PictureBox1.Image = Nothing
            PictureBox2.Image = Nothing
            PictureBox3.Image = Nothing
            PictureBox4.Image = Nothing
            PictureBox5.Image = Nothing
            Dim dirs As String() = Directory.GetFiles(TempPath)
            Dim dir As String
            For Each dir In dirs
                Try
                    File.Delete(dir)
                Catch ex As Exception

                End Try
            Next
        End If
        Try
            Directory.Delete(TempPath)
        Catch ex As Exception
        End Try
    End Sub

Het probleem is dat de images die in een picturebox staan, dat die niet gewist kunnen worden omdat die 'in use' zijn.

Ik heb al picturebox1.dispose() geprobeerd, zelfs met extra picturebox1.update() en picturebox1.refresh(), maar dit hielp allemaal niet.

Ik ben dus op zoek naar een manier om de files vrij te geven, waarna ik ze kan deleten...

edit:
Ik heb ook een MyBase.dispose() geprobeerd tussen regel 8 en 9...

[ Voor 7% gewijzigd door Swerfer op 07-12-2003 12:27 ]

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:49

RayNbow

Kirika <3

Ik ben niet echt een expert op VB.NET gebied maar ik heb ff wat code uitgeprobeerd en het volgende leek bij mij te werken:
 
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    PictureBox1.Image = Image.FromFile("d:\tmp.jpg")
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    PictureBox1.Image = Nothing
    System.GC.Collect()
    Kill("d:\tmp.jpg")
End Sub


Maar of deze code altijd werkt weet ik niet.
* RayNbow heeft geen idee hoe de Garbage Collector van .NET werkt

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 11-07 20:53
Als ik de System.GC.Collect() eerst oproep, en dan de Mybase.Dispose() na de PictureBox.Image = Nothing dan werkt het perfect.

Bedankt!

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 05:06
Swerfer schreef op 07 december 2003 @ 12:53:
Als ik de System.GC.Collect() eerst oproep, en dan de Mybase.Dispose() na de PictureBox.Image = Nothing dan werkt het perfect.

Bedankt!
Zeer vreemd.
Eerst zou je de Dispose moeten aanroepen, zodat het geheugen als 'vrij te geven' kan gemarkeerd worden.
Daarna zou je pas de garbage collector z'n werk laten doen.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 11-07 20:53
whoami schreef op 07 december 2003 @ 12:55:
[...]


Zeer vreemd.
Eerst zou je de Dispose moeten aanroepen, zodat het geheugen als 'vrij te geven' kan gemarkeerd worden.
Daarna zou je pas de garbage collector z'n werk laten doen.
Als ik het andersom doe of de mybase.dispose() weglaat, dan geeft hij alle files vrij, behalve die in de eerste picturebox zit...

edit:
Misschien heeft die garbage collector wel wat tijd nodig die hij krijgt door mybase.dispose() aan te roepen?


Ja dus, GC.WaitForPendingFinalizers() na de GC.Collect() lost het probleem op...

[ Voor 25% gewijzigd door Swerfer op 07-12-2003 13:04 ]

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com