2016-08-04 5 views
0

So habe ich eine Windows Form-Anwendung, die einige seltsame Probleme hat.Problem mit der Zeichnung von Steuerelementen als Teil des Load/Shown-Ereignisses

Ich bemerke, dass wenn einige Formulare angezeigt werden, sie weiße Felder zeigen, wo alle Steuerelemente anstelle des Textes sind.

Hier sind einige images des Problems.

Ich hatte ursprünglich alles im Load-Event und wechselte zum angezeigten Event. Es hatte immer noch ein Problem, also habe ich den eigentlichen Arbeitsteil in eine andere Methode verschoben und einen Delegaten hinzugefügt, um neue Dateien in das checkedlistbox-Steuerelement zu schreiben, falls das das Problem war.

Leider passiert es immer noch und ich bin verwirrt. Hier

ist der Code Ich verwende:

Private Sub form_FileCleanup_Shown(sender As Object, e As EventArgs) Handles Me.Shown 
    frmMain.Hide() 
    Me.BringToFront() 
    DoWork() 
End Sub 

Private Sub DoWork() 

    For Each _file As KeyValuePair(Of String, FileInfoList.fileInfoS) In fl.FileRemoveList 
     Dim fi As FileInfoList.fileInfoS = _file.Value 
     UpdateFileListl(fi.FullName) 
     'cbxFileList.Items.Add(fi.FullName, False) 
    Next 

    lblStatusMessage.Text = "" 

End Sub 

Private Delegate Sub FileListUpdateDelegate(fileName As String) 
Private Sub UpdateFileListl(fileName As String) 
    Try 
     If Me.cbxFileList.InvokeRequired Then 
      cbxFileList.Invoke(New FileListUpdateDelegate(AddressOf UpdateFileListl), fileName) 
     Else 
      cbxFileList.Items.Add(fileName, False) 
      cbxFileList.Update() 
     End If 
    Catch ex As Exception 
     errorLogs.Add(ex) 
    End Try 

End Sub 
+2

Laden Sie das Bild im Stapelüberlauf hoch. –

+1

Sieht so aus, als wäre es damit beschäftigt, etwas anderes zu tun und hat keine Zeit, um die Steuerelemente zu malen. – Plutonix

+0

Wahrscheinlich ist Ihr 'DoWork' zeitverschwendend und macht die UI-Lauffläche beschäftigt. Verwenden Sie [Async/Await] (https://msdn.microsoft.com/en-us/library/mt674902.aspx) oder verwenden Sie [BackgroundWorker] (https://msdn.microsoft.com/en-us/library/cc221403 (v = vs.95) .aspx? cs-save-lang = 1 und cs-lang = vb # code-snippet-1). –

Antwort

0

In der Hauptform wurde eine CPU intensive Aufgabe ausgeführt wird. Aus irgendeinem Grund dachte ich, dass es sequentiell wäre, aber die neue Form arbeitete zur gleichen Zeit wie die alte Form, die das Problem verursacht hat.

Verwandte Themen