,我有以下事件处理程序的调用:的事件处理程序
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(即块),则控制权会返回到呼叫站点。完成后,原始线程将被中断以完成该方法的其余部分。据我了解,没有创建新线程,它是从那里的所有中断。 –