以下是什么区别?
public delegate void SetSthDelegate(int[] x);
// 1)
SetSthDelegate sst = new SetSthDelegate(SetSthMethod);
sst(x);
// 2)
Invoke(new SetSthDelegate(SetSthMethod), new object[] {x}
// 3)
BeginInvoke(new SetSthDelegate(SetSthMethod), new object[] {x}
我了解到2)用于同步调用方法,而3)用于异步调用方法,但是什么时候要同步和异步调用方法?
当插图和说明何时使用1),2),3)更合适时,有人能告诉我吗?
还可以解释为什么人们更喜欢Invoke而不是BeingInvoke,反之亦然?
答案 0 :(得分:0)
数字1)和2)是相同的。他们同步调用委托。正如你所说,数字3)异步调用它。 如果您不想锁定线程并等到委托代码结束执行,则需要异步执行委托。通过使用beginInvoke,委托在后台线程中执行,并且主线程继续执行某些操作。
希望这有帮助!
答案 1 :(得分:0)
使用BeginInvoke的主要原因是操作需要时间。然后你可能不想阻止调用者,只是在完成后得到通知。它增加了代码的复杂性,所以如果你不需要它,你可能不想这样做。
如果操作很快,您可能不希望使用异步调用使代码复杂化。此外,如果此操作确实要求呼叫者等待答案,那么同步可能同样好。这一切都取决于......
答案 2 :(得分:0)
在我的应用程序中,当我想发送电子邮件或记录我使用BeginInvoke的东西因为它不是必要的等待