是RaiseEvent線程安全嗎?VB.NET RaiseEvent,線程安全?
在C#編寫
if (event != null)
{
event.invoke();
}
和C#代碼不是線程安全....
是RaiseEvent線程安全嗎?VB.NET RaiseEvent,線程安全?
在C#編寫
if (event != null)
{
event.invoke();
}
和C#代碼不是線程安全....
如果我需要做的線程安全的事件,我寫這篇文章:
Class Test
Public Event Click(ByVal sender As Object, ByVal e As EventArgs)
Public Event MouseIn(ByVal sender As Object, ByVal e As EventArgs)
Private Delegate Sub EventArgsDelegate(ByVal e As EventArgs)
Private ReadOnly _parent As Control
Public Sub New(ByVal parent As Control)
_parent = parent
End Sub
Private Sub OnClick(ByVal e As EventArgs)
If _parent.InvokeRequired Then
_parent.Invoke(New EventArgsDelegate(AddressOf OnClick), e)
Else
RaiseEvent Click(Me, e)
End If
End Sub
Private Sub OnMouseIn(ByVal e As EventArgs)
If _parent.InvokeRequired Then
_parent.Invoke(New EventArgsDelegate(AddressOf OnMouseIn), e)
Else
RaiseEvent MouseIn(Me, e)
End If
End Sub
End Class
然後每當我需要提高的情況下我只是用OnClick(new eventargs(...))
等,如果你使用Reflector你可以觀察到,大多數線程安全控制使用類似的系統。
在C#中,而寫:
EventHandler h= myEvent;
if (h!=null)
h(...);
這就避免了明顯的問題(即在測試和調用之間取消訂閱),但這也不是線程安全的。
調用事件意味着偵聽器已準備好處理此事件。這很大程度上取決於您的具體情況,通常通過使用同步機制來實現。
「線程安全」是什麼意思?
在此上下文中定義「線程安全」。你的意思是,「事件」可以安全使用兩次?或者,「事件可以安全地調用當前線程」,或者......? – 2010-01-08 08:47:27