,我有以下事件處理程序的調用:的事件處理程序
private EventHandler<MyEventArgs> _myEventHandler;
public event EventHandler<MyEventArgs> MyEvent
{
add { _myEventHandler += value; }
remove { _myEventHandler -= value; }
}
有人能解釋一下下面的代碼片段之間的區別?
片段事件處理(A):
//Snippet A:
if (_myEventHandler != null)
{
_myEventHandler(new MyEventArgs());
}
片段的BeginInvoke(B):
//Snippet B:
if (_myEventHandler != null)
{
_myEventHandler.BeginInvoke(new MyEventArgs(), ar =>
{
var del = (EventHandler<MyEventArgs>)ar.AsyncState;
del.EndInvoke(ar);
}, _myEventHandler);
}
對於澄清:什麼是調用的事件處理程序 「只是因爲它是」,用BeginInvoke
之間的區別?
它不一定叫在不同的線程是嗎?異步調用委託仍然在同一個線程上執行,但返回阻止AFAIK的時刻。 –
@Jeff no;異步調用委託意味着它發生在工作線程上。它會如何不同步運行?請注意,這與Control.BeginInvoke略有不同,如果您已經在UI線程上,它可能會在同一線程上繼續 –
如果正在調用的代理正在執行IO(即塊),則控制權會返回到呼叫站點。完成後,原始線程將被中斷以完成該方法的其餘部分。據我瞭解,沒有創建新線程,它是從那裏的所有中斷。 –