这是一个很好的做法,足以确保VB.NET中方法DoSomething
的线程安全吗?
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
答案 0 :(得分:3)
我相信你可能会通过线程安全来表达与通常的术语定义不同的东西。该术语的正常含义是多个线程可以同时调用相同的方法或对象而没有错误或负面的副作用。通常,这种线程安全性是通过无状态和锁定来完成的(例如SyncLock
)。
但是,在您的示例中,代码并未尝试提供这种线程安全性,或者至少不是直接提供。它确实实现了这种线程安全性,但只能强制所有调用都在同一个线程(UI线程)上执行。 WinForm应用程序(我认为这是)要求所有UI工作都在UI线程上完成。因此,如果从另一个线程调用了对UI执行某些操作的方法,则必须首先在完成其工作之前调用UI线程。对于该特定场景,您发布的代码很好。