| 

.NET C# Java Javascript Exception

7
Hallo Zusammen,

Ich stolper gerade über ein Threadproblem, dass ich zwar ganz russich mit CheckForIllegalCrossThreadCalls = False abstellen kann, aber ich würde es gern besser machen wollen.

Ich befülle ein listview mit einer Funktion AddDocument


friend listviewfiles as new collection

Friend Sub AddDocument(ByVal filename As String)

Try

If Not filename = "" And My.Computer.FileSystem.FileExists(filename) Then

ImageList1.Images.Add(filename, GetIconForFile(filename))
ListView1.Items.Add(My.Computer.FileSystem.GetFileInfo(filename).CreationTime.ToLongDateString, filename)
Application.DoEvents()

ListView1.Sort()

listviewfiles.Add(filename, filename)

End If

Catch ex As Exception
MsgBox(ex.Message)
End Try


End Sub

Das funtioniert soweit beim Aufruf aus der Form ganz gut, beim Aufruf aus einem FileSystemWatcher nicht mehr. Der Grund ist ganz klar (Aufruf aus einem anderem Thread als der der das Steuerelement erzeugt hat/besitzt). Irgendwei kann man das mit Invoke umgehen. Aber ich versteh es nicht. Was muss ich wo invoken, damit das für mein mini Beispiel hier läuft. Ich nehme an, dass die Imagelist genauso Invoked werden muss...

Hoffe mir kann das einer mal mit wenigen Worten erklären.

Vielen Dank,
Daniel
16.11.2011
schlumpfger 288 1 8
2 Antworten
2
Hallo schlumpfger,

angenommen Deine AddDocument Methode befindet sich in Deinem Formular. Dann schreibst Du im Callback des FileSystemWatchers folgenden Code, um die AddDocument Methode auf dem richtigen Thread aufzurufen (fileName hier nur als dummy)

Dim fileName As String = "" 
If Me.ListView1.InvokeRequired Then
Me.ListView1.Invoke(Sub() AddDocument(fileName))
Else
AddDocument(fileName)
End If

Viel Erfolg
Florian
16.11.2011
ffordermaier 8,4k 3 9
0
Hach, wie einfach :)...
Funktioniert wunderbar. Ich danke dir!!!
16.11.2011
schlumpfger 288 1 8
Gern geschehen.
ffordermaier 16.11.2011

Stelle deine .net-Frage jetzt!