Bild in Picturebox laden als Thread

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 36 Antworten in diesem Thema. Der letzte Beitrag () ist von -Franky-.

    Bild in Picturebox laden als Thread

    Moin,

    Ich Versuche aktuell meinen Code etwas zu Verbessern (Da sich die Form immer aufhängt während dem Laden)

    Der Code Erstellt erst eine Picturebox und lädt anschließend das entsprechende Bild.
    Das ganze läuft als Thread.

    VB.NET-Quellcode

    1. PBI = New PictureBox
    2. BeginInvoke(Sub() PanelI.Controls.Add(PBI))
    3. ' MsgBox(ModCheck.ToString)
    4. BeginInvoke(Sub()
    5. With PBI
    6. .Name = i & "_Picturebox"
    7. .Dock = DockStyle.Left
    8. .BackColor = Color.FromArgb(40, 40, 40)
    9. .Width = 160
    10. .BringToFront()
    11. If Filename.Contains("png") Then
    12. If File.Exists(ModCheck & i & "\" & Filename) = True Then
    13. .SizeMode = PictureBoxSizeMode.StretchImage
    14. .Load(ModCheck & i & "\" & Filename)
    15. Else
    16. .SizeMode = PictureBoxSizeMode.CenterImage
    17. .Image = .ErrorImage
    18. End If
    19. ElseIf Filename.Contains("dds") Then
    20. If File.Exists(ModCheck & i & "\" & Filename) = True Then
    21. ' MsgBox("DDS, JA")
    22. .SizeMode = PictureBoxSizeMode.StretchImage
    23. .Image = New Bitmap(bt)
    24. Else
    25. .SizeMode = PictureBoxSizeMode.CenterImage
    26. .Image = .ErrorImage
    27. End If
    28. Else
    29. .SizeMode = PictureBoxSizeMode.CenterImage
    30. .Image = .ErrorImage
    31. End If
    32. End With
    33. End Sub)


    *(bt) ist eine Klasse

    VB.NET-Quellcode

    1. Dim bt As Bitmap = LoadDDSUI.LoadDDSX(ModCheck & i & "\" & Filename)


    Nur leider in diesem Versuch (So habe ich es mit dem Invoke gefunden) wird das ErrorImage Geladen statt das entsprechende Bild.

    Ich Freue mich über Feedback, da ich nach 2Std jetzt Komplett Ratlos bin xD

    So ein Quatsch sowas in einem (angeblichen) Thread zu machen und dann direkt zu Invoken… dann gehen ja alles Vorteile des Threads wieder verloren. Im übrigen wäre es schön den ganzen Code zu sehen und nicht nur Teile davon…

    Edit:
    Bring erstmal alles ohne Threading ans laufen, dann kann man wenigstens sauber debuggen und schauen wo der Fehler ist.

    Deine Filename Prüfungen sind auch nicht optimal. Denn du willst ja die Extension prüfen und nicht ob irgendwo im Dateinamen png/dds vorkommt. Was wenn die Datei png.xls heiß?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „mrMo“ ()

    mrMo schrieb:

    Bring erstmal alles ohne Threading ans laufen, dann kann man wenigstens sauber debuggen und schauen wo der Fehler ist.


    Der Code lief ja schon ohne Threading.
    Da sich aber viele Nutzer beklagt hatten das die Form beim Laden immer einfriert habe ich es mal mit den Threads Versucht.

    Der Restliche Code ist hier
    (Also die .DDS Funktion von @-Franky-)

    Kannst du bitte den aktuellen Stand vom Code der ganzen Methode hier posten? Ich will mir den nicht aus anderen Threads zusammen suchen um später festzustellen das irgendwas fehlt.

    Friert die Form den jetzt nicht mehr ein?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    xX-Nick-Xx schrieb:

    Der Code lief ja schon ohne Threading.
    Belasse es dabei, denn die Manipulation von GUI-Controlös funktioniert nur im GUI-Thread.
    Debugge mal den Code und Du wirst sehen, wo er rausfliegt.
    Genau deswegen hast Du wohl das Error-Image geladen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    mrMo schrieb:

    Kannst du bitte den aktuellen Stand vom Code der ganzen Methode hier posten? Ich will mir den nicht aus anderen Threads zusammen suchen um später festzustellen das irgendwas fehlt.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Imports System.Drawing.Imaging
    4. Imports System.Runtime.InteropServices
    5. Public Class LoadDDSU
    6. Private Const S_OK As Integer = &H0
    7. Private Const WINCODEC_SDK_VERSION2 As Integer = &H237
    8. Private GUID_WICPixelFormat32bppBGRA As Guid = New Guid("{6fddc324-4e03-4bfe-b185-3d77768dc90f}")
    9. Public ModCheck As String = My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\FarmingStudio21\MCLoad\"
    10. Private Enum WICAccessOption As Integer
    11. GENERIC_READ = &H80000000
    12. GENERIC_WRITE = &H40000000
    13. End Enum
    14. Private Enum WICDecodeOptions As Integer
    15. WICDecodeMetadataCacheOnDemand = &H0
    16. WICDecodeMetadataCacheOnLoad = &H1
    17. End Enum
    18. Private Enum WICBitmapLockFlags As Integer
    19. WICBitmapLockRead = &H1
    20. WICBitmapLockWrite = &H2
    21. End Enum
    22. Private Enum WICBitmapCreateCacheOption As Integer
    23. WICBitmapNoCache = &H0
    24. WICBitmapCacheOnDemand = &H1
    25. WICBitmapCacheOnLoad = &H2
    26. End Enum
    27. Private Enum WICBitmapDitherType As Integer
    28. WICBitmapDitherTypeNone = &H0
    29. WICBitmapDitherTypeSolid = &H0
    30. WICBitmapDitherTypeOrdered4x4 = &H1
    31. WICBitmapDitherTypeOrdered8x8 = &H2
    32. WICBitmapDitherTypeOrdered16x16 = &H3
    33. WICBitmapDitherTypeSpiral4x4 = &H4
    34. WICBitmapDitherTypeSpiral8x8 = &H5
    35. WICBitmapDitherTypeDualSpiral4x4 = &H6
    36. WICBitmapDitherTypeDualSpiral8x8 = &H7
    37. WICBitmapDitherTypeErrorDiffusion = &H8
    38. End Enum
    39. Private Enum WICBitmapPaletteType As Integer
    40. WICBitmapPaletteTypeCustom = &H0
    41. WICBitmapPaletteTypeMedianCut = &H1
    42. WICBitmapPaletteTypeFixedBW = &H2
    43. WICBitmapPaletteTypeFixedHalftone8 = &H3
    44. WICBitmapPaletteTypeFixedHalftone27 = &H4
    45. WICBitmapPaletteTypeFixedHalftone64 = &H5
    46. WICBitmapPaletteTypeFixedHalftone125 = &H6
    47. WICBitmapPaletteTypeFixedHalftone216 = &H7
    48. WICBitmapPaletteTypeFixedWebPalette = WICBitmapPaletteTypeFixedHalftone216
    49. WICBitmapPaletteTypeFixedHalftone252 = &H8
    50. WICBitmapPaletteTypeFixedHalftone256 = &H9
    51. WICBitmapPaletteTypeFixedGray4 = &HA
    52. WICBitmapPaletteTypeFixedGray16 = &HB
    53. WICBitmapPaletteTypeFixedGray256 = &HC
    54. End Enum
    55. <StructLayout(LayoutKind.Sequential)>
    56. Private Structure WICRect
    57. Dim X As Integer
    58. Dim Y As Integer
    59. Dim Width As Integer
    60. Dim Height As Integer
    61. End Structure
    62. <DllImport("windowscodecs.dll", EntryPoint:="WICCreateImagingFactory_Proxy")>
    63. Private Shared Function CreateImagingFactory(
    64. <[In]> ByVal SDKVersion As Integer,
    65. <Out> ByRef ppIImagingFactory As IntPtr) As Integer
    66. End Function
    67. <DllImport("windowscodecs.dll", EntryPoint:="IWICImagingFactory_CreateDecoderFromFilename_Proxy")>
    68. Private Shared Function CreateDecoderFromFilename(
    69. <[In]> ByVal pFactory As IntPtr,
    70. <[In]> <MarshalAs(UnmanagedType.LPWStr)> ByVal wzFilename As String,
    71. <[In]> ByVal pguidVendor As IntPtr,
    72. <[In]> ByVal dwDesiredAccess As WICAccessOption,
    73. <[In]> ByVal metadataOptions As WICDecodeOptions,
    74. <Out> ByRef ppIDecoder As IntPtr) As Integer
    75. End Function
    76. <DllImport("windowscodecs.dll", EntryPoint:="IWICBitmapDecoder_GetFrameCount_Proxy")>
    77. Private Shared Function GetFrameCount(
    78. <[In]> ByVal pIWICDecoder As IntPtr,
    79. <Out> ByRef pCount As Integer) As Integer
    80. End Function
    81. <DllImport("windowscodecs.dll", EntryPoint:="IWICBitmapDecoder_GetFrame_Proxy")>
    82. Private Shared Function GetFrame(
    83. <[In]> ByVal pIWICDecoder As IntPtr,
    84. <[In]> ByVal index As Integer,
    85. <Out> ByRef ppIBitmapFrame As IntPtr) As Integer
    86. End Function
    87. <DllImport("windowscodecs.dll", EntryPoint:="IWICBitmapSource_GetSize_Proxy")>
    88. Private Shared Function GetSize(
    89. <[In]> ByVal pIWICBitmapSource As IntPtr,
    90. <Out> ByRef puiWidth As Integer,
    91. <Out> ByRef puiHeight As Integer) As Integer
    92. End Function
    93. <DllImport("windowscodecs.dll", EntryPoint:="IWICBitmap_Lock_Proxy")>
    94. Private Shared Function WicLockBits(
    95. <[In]> ByVal pIBitmap As IntPtr,
    96. <[In]> ByRef prcLock As WICRect,
    97. <[In]> ByVal lockFlags As WICBitmapLockFlags,
    98. <Out> ByRef ppILock As IntPtr) As Integer
    99. End Function
    100. <DllImport("windowscodecs.dll", EntryPoint:="IWICBitmapLock_GetDataPointer_STA_Proxy")>
    101. Private Shared Function GetDataPointer(
    102. <[In]> ByVal pILock As IntPtr,
    103. <Out> ByRef pcbBufferSize As Integer,
    104. <Out> ByRef ppbData As IntPtr) As Integer
    105. End Function
    106. <DllImport("windowscodecs.dll", EntryPoint:="IWICImagingFactory_CreateFormatConverter_Proxy")>
    107. Private Shared Function CreateFormatConverter(
    108. <[In]> ByVal pFactory As IntPtr,
    109. <Out> ByRef ppIFormatConverter As IntPtr) As Integer
    110. End Function
    111. <DllImport("windowscodecs.dll", EntryPoint:="IWICFormatConverter_Initialize_Proxy")>
    112. Private Shared Function InitializeFormatConverter(
    113. <[In]> ByVal pIFormatConverter As IntPtr,
    114. <[In]> ByVal pISource As IntPtr,
    115. <[In]> ByRef dstFormat As Guid,
    116. <[In]> ByVal dither As WICBitmapDitherType,
    117. <[In]> ByVal pIPalette As IntPtr,
    118. <[In]> ByVal alphaThresholdPercent As Double,
    119. <[In]> ByVal paletteTranslate As WICBitmapPaletteType) As Integer
    120. End Function
    121. <DllImport("windowscodecs.dll", EntryPoint:="IWICImagingFactory_CreateBitmapFromSource_Proxy")>
    122. Private Shared Function CreateBitmapFromSource(
    123. <[In]> ByVal pFactory As IntPtr,
    124. <[In]> ByVal pIBitmapSource As IntPtr,
    125. <[In]> ByVal cacheOption As WICBitmapCreateCacheOption,
    126. <[In]> ByRef ppIBitmap As IntPtr) As Integer
    127. End Function
    128. Function LoadDDSX(ByVal DDSPath As String) As Bitmap '<- Hier soll die Zuständige Picturebox Zugewiesen werden
    129. 'For i = 0 To ListView1.Items.Count - 1
    130. 'Dim lines1() As String = System.IO.File.ReadAllLines(ModCheck & i & "\" & i & ".txt")
    131. 'Dim oldtext As String = lines1(0)
    132. 'Dim newtext As String = oldtext.Replace("/", "\")
    133. ' LoadDDS(i & "\" & newtext, .Image) 'Hier soll die Picturebox genannt werden) .Image =
    134. Dim strPicture As String = DDSPath
    135. Dim intWidth As Integer = 0
    136. Dim intHeight As Integer = 0
    137. Dim intBuffSize As Integer = 0
    138. Dim intFrameCount As Integer = 0
    139. Dim tWICRect As WICRect = New WICRect
    140. Dim pIWICLock As IntPtr = IntPtr.Zero
    141. Dim pIWICBitmap As IntPtr = IntPtr.Zero
    142. Dim pIWICDecoder As IntPtr = IntPtr.Zero
    143. Dim pIImagingFactory As IntPtr = IntPtr.Zero
    144. Dim pIWICBitmapFrame As IntPtr = IntPtr.Zero
    145. Dim pIWICFormatConverter As IntPtr = IntPtr.Zero
    146. Dim pData As IntPtr = IntPtr.Zero
    147. Dim bmp As Bitmap = Nothing
    148. ' WIC starten
    149. If CreateImagingFactory(WINCODEC_SDK_VERSION2, pIImagingFactory) = S_OK Then
    150. ' ein Decoder vom Bild erstellen
    151. If CreateDecoderFromFilename(pIImagingFactory, strPicture, IntPtr.Zero,
    152. WICAccessOption.GENERIC_READ,
    153. WICDecodeOptions.WICDecodeMetadataCacheOnLoad,
    154. pIWICDecoder) = S_OK Then
    155. ' Anzahl der Frames ermitteln
    156. If GetFrameCount(pIWICDecoder, intFrameCount) = S_OK Then
    157. ' mindestens ein Frame vorhanden?
    158. If intFrameCount > 0 Then
    159. ' erstes Frame laden
    160. If GetFrame(pIWICDecoder, 0, pIWICBitmapFrame) = S_OK Then
    161. ' ein FormatConverter erstellen
    162. If CreateFormatConverter(pIImagingFactory, pIWICFormatConverter) = S_OK Then
    163. ' FormatConverter initialisieren -> PixelFormat32bppBGRA
    164. If InitializeFormatConverter(pIWICFormatConverter, pIWICBitmapFrame,
    165. GUID_WICPixelFormat32bppBGRA,
    166. WICBitmapDitherType.WICBitmapDitherTypeNone,
    167. IntPtr.Zero, 0,
    168. WICBitmapPaletteType.WICBitmapPaletteTypeMedianCut) = S_OK Then
    169. ' ein WIC-Bitmap vom FormatConverter erstellen
    170. If CreateBitmapFromSource(pIImagingFactory, pIWICFormatConverter,
    171. WICBitmapCreateCacheOption.WICBitmapCacheOnLoad, pIWICBitmap) = S_OK Then
    172. ' Dimensionen der WIC-Bitmap ermitteln
    173. If GetSize(pIWICBitmap, intWidth, intHeight) = S_OK Then
    174. With tWICRect
    175. .X = 0
    176. .Y = 0
    177. .Width = intWidth
    178. .Height = intHeight
    179. End With
    180. ' WIC-Bitmap zum auslesen der Pixeldaten sperren
    181. If WicLockBits(pIWICBitmap, tWICRect, WICBitmapLockFlags.WICBitmapLockRead, pIWICLock) = S_OK Then
    182. ' Pointer auf die Pixeldaten und Größe der Pixeldaten ermitteln
    183. If GetDataPointer(pIWICLock, intBuffSize, pData) = S_OK Then
    184. ' entsprechend ein ByteArray dimensionieren
    185. Dim arrData As Byte() = New Byte(intBuffSize - 1) {}
    186. ' Pixeldaten vom Pointer in das ByteArray kopieren
    187. Marshal.Copy(pData, arrData, 0, intBuffSize)
    188. ' neues Bitmap in gleicher Größe und Pixelformat wie das WIC-Bitmap erstellen
    189. bmp = New Bitmap(intWidth, intHeight, PixelFormat.Format32bppArgb)
    190. ' Bitmap zum schreiben der Pixeldaten sperren
    191. Dim bmpdata As BitmapData = bmp.LockBits(New Rectangle(0, 0, intWidth, intHeight),
    192. ImageLockMode.WriteOnly, bmp.PixelFormat)
    193. ' Pixeldaten aus dem ByteArray in das Bitmap schreiben
    194. Marshal.Copy(arrData, 0, bmpdata.Scan0, intBuffSize)
    195. ' Sperre der Bitmap aufheben
    196. bmp.UnlockBits(bmpdata)
    197. ' Bild ausgeben
    198. 'For Each C As Panel In FlowLayoutPanel1.Controls
    199. ' For Each TB As Control In C.Controls
    200. ' If TB.GetType() Is GetType(PictureBox) Then
    201. ' TB.Name = bmp
    202. ' End If
    203. ' Next
    204. 'Next
    205. 'For Each C As Panel In FlowLayoutPanel1.Controls
    206. ' For Each TB As Control In C.Controls
    207. ' If TB.GetType() Is GetType(PictureBox) Then
    208. ' TB.BackgroundImage = bmp
    209. ' End If
    210. ' Next
    211. 'Next
    212. End If
    213. ' Sperre der WIC-Bitmap aufheben
    214. Marshal.Release(pIWICLock)
    215. End If
    216. End If
    217. ' WIC-Bitmap löschen
    218. Marshal.Release(pIWICBitmap)
    219. End If
    220. ' FormatConverter löschen
    221. Marshal.Release(pIWICFormatConverter)
    222. End If
    223. End If
    224. ' geladenes Frame löschen
    225. Marshal.Release(pIWICBitmapFrame)
    226. End If
    227. End If
    228. End If
    229. ' Decoder löschen
    230. Marshal.Release(pIWICDecoder)
    231. End If
    232. ' WIC beenden
    233. Marshal.Release(pIImagingFactory)
    234. End If
    235. ' Next
    236. Return bmp
    237. End Function
    238. End Class




    mrMo schrieb:

    Friert die Form den jetzt nicht mehr ein?

    Einfrieren tut sie nun nicht mehr, aber sie lädt auch nicht alles

    Ohne Thread:


    Mit Thread:



    RodFromGermany schrieb:

    Belasse es dabei, denn die Manipulation von GUI-Controlös funktioniert nur im GUI-Thread.

    Das hat mich jetzt mal auf eine Idee gebracht.

    Ohje das ist aber arg viel code um nen paar Bildchen zu laden… keine Ahnung was das alles macht, sieht arg kompliziert aus. Aber egal…

    Ich meinte den Code, wo das Bild in der Form geladen/verarbeitet/angezeigt wird.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    RodFromGermany schrieb:

    Belasse es dabei, denn die Manipulation von GUI-Controlös funktioniert nur im GUI-Thread.


    ich habe mal die Vorarbeiten jetzt in einem Thread gelassen, und die Controls so laden lassen was auch sehr gut Funktioniert.
    Nur noch den Fehler finden warum er nur 1x lädt.
    EDIT: Fehler gefunden xD Hatte in der For Each statt "- 1" ein "= 1"

    mrMo schrieb:

    Ohje das ist aber arg viel code um nen paar Bildchen zu laden… keine Ahnung was das alles macht, sieht arg kompliziert aus. Aber egal…

    ja, ist auch sehr viel Code (Diese Funktion ist dafür da um DDS Bilder zu laden was so leider nicht geht.)

    Da wo er das Bild lädt ist doch oben?



    EDIT: Funktioniert nun auch etwas Flüssiger:

    xX-Nick-Xx schrieb:

    Da wo er das Bild lädt ist doch oben?
    Ja die Stelle meine ich. Da fehlt der Methoden Kopf und man sieht nicht wo Filename herkommt und auch nicht was ModCheck macht. Das ganze sieht nach Schleife aus, die sieht man auch nicht.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    Ja die Stelle meine ich.


    Achso, das habe ich raus gelassen da der Code noch viel Komplizierter und länger ist als die Klasse an sich.
    Oben wird nur das Icon Extrahiert / die Beschreibung, sowie die Button und die Metro Elemente von @Gather
    Während des Extrahieren läuft es nun Ganz gut, nur während die Controls geladen werden hängt es kurz.
    Nur Bilder und Beschreibung laden sind jetzt schon 1200 Zeilen in VS

    Ok, evtl. (sieht man ja nicht) wird hier in der Schleife ja immer die letzte Picturebox überschrieben und es bleibt immer nur die letzte übrig.

    PBI = New PictureBox

    Deklariere die mal innerhalb der Schleife (die es vielleicht gibt).
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    Deklariere die mal innerhalb der Schleife (die es vielleicht gibt).


    Diese sind alle Außerhalb der Schleife Deklariert.

    VB.NET-Quellcode

    1. Dim PanelX As New Panel
    2. Dim PanelY As New Panel
    3. Dim RCTB As New RichTextBox
    4. Dim btn As New Button
    5. Dim btn2 As New Button
    6. Dim PBI As New PictureBox
    7. Dim Switch As New MetroSuite.MetroSwitch
    8. Dim LoadBMP As Bitmap

    ~Sind jetzt in der Schleife

    Ach ja und um auf deine Frage zurück zu kommen wofür ModCheck ist:

    VB.NET-Quellcode

    1. Public ModCheck As String = My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\FarmingStudio21\MCLoad\"

    xX-Nick-Xx schrieb:

    Diese sind alle Außerhalb der Schleife Deklariert.
    evtl. ist das ja das Problem.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    evtl. ist das ja das Problem.

    Also, das Bilder Laden Funktioniert jetzt ja (wie oben beschrieben)

    Einige Bilder fehlen nur weil sie nicht in der Datei gefunden wurden, das ist aber aktuell noch Normal.

    Und es wurde nur eine Datei geladen weil ich einen Fehler in der For Each hatte.

    VB.NET-Quellcode

    1. ​For i As Integer = 0 To ListBox1.Items.Count = 1

    ein Peinlicher Fehler :P

    Das ist das Problem wenn man Code weg lässt. Friert die Form denn jetzt noch ein?

    @xX-Nick-Xx
    For i As Integer = 0 To ListBox1.Items.Count = 1
    -> Programmierst du etwa Option Strict Off? Zudem ist das, anders als du behauptest, keine For each Schleife.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mrMo“ ()

    mrMo schrieb:

    Friert die Form denn jetzt noch ein?

    Also die Ladezeit Betrug früher 30sek
    jetzt Beträgt sie 9sek und 40ms
    in den 9sek hängt die Form nur während die Controls erstellt werden.

    Hier mal ein Video wo ich ein GIF Verwendet habe um zu Demonstrieren wann sie hängt.



    ~Nein Open Strict ist an. (zumindest jetzt wieder, VS Speichert das seit dem letzten Update nicht mehr)Programmierst du etwa Option Strict Off?

    xX-Nick-Xx schrieb:

    in den 9sek hängt die Form nur während die Controls erstellt werden.
    Du kannst doch die GUI am Updaten hindern, während die Controls erstellt werden.
    Gugst Du .SuspendLayout() und .ResumeLayout(...).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Man könnte mittels Lazy Loading Pattern immer nur die Bilder/Controls/Datensätze laden, die angezeigt werden. Müsstest also nicht mehr alle laden, sondern z.b. nur die Ersten 8. Beim Scrollen werden diejenigen die noch Fehlen dann immer nachgeladen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen