Ist dies eine gute Praxis und genug, um die Thread-Sicherheit der Methode zu gewährleisten DoSomething
in VB.NET?
Public Class MyForm : Inherits Form
Public Sub DoSomething(parameter As Object)
If Me.InvokeRequired Then
Me.Invoke(Sub() DoSomething(parameter))
Else
"Do Something
End If
End Sub
End Class
Antworten:
3 für die Antwort № 1Ich glaube, Sie können etwas anderes bedeuten Fadensicherheit als die übliche Definition des Begriffs. Die normale Bedeutung des Begriffs ist, dass dieselbe Methode oder dasselbe Objekt von mehreren Threads gleichzeitig ohne Fehler oder negative Nebenwirkungen aufgerufen werden kann. Typischerweise wird diese Art von Thread-Sicherheit durch Zustandslosigkeit und Sperren (z. SyncLock
).
In Ihrem Beispiel ist dies jedoch nicht der Fallversuchen, diese Art von Thread-Sicherheit zu bieten, oder zumindest nicht direkt. Diese Art von Thread-Sicherheit wird erreicht, jedoch nur, indem alle Aufrufe auf demselben einzelnen Thread (dem UI-Thread) ausgeführt werden. WinForm-Anwendungen (von denen ich annehme, dass dies der Fall ist) erfordern, dass alle UI-Arbeiten auf dem UI-Thread ausgeführt werden. Wenn eine Methode, die etwas mit der Benutzeroberfläche tut, von einem anderen Thread aufgerufen wird, muss sie daher vor Abschluss ihrer Arbeit zunächst wieder auf den Benutzeroberflächenthread zugreifen. Für dieses spezielle Szenario ist der von Ihnen bereitgestellte Code in Ordnung.