私は最近、彼らがあなたと良い警官/悪い警官を演じる、本当に悪いインタビューの1つを持っていました. 私が何を答えても、そのうちの 1 人には十分ではなく、私の自信は刻一刻と縮んでいました。私を本当に混乱させた彼の最後の質問は次のとおりです。
コントロールが InvokeRequired を必要とする場合、.Invoke または .BeginInvoke の実行に違いはありますか?
私がそれをどのように理解しているか、例を示しましょう:
public delegate string WorkLongDelegate(int i);
var del = new WorkLongDelegate(WorkLong);
var callback = new AsyncCallback(CallBack);
del.BeginInvoke(3000, callback, del);
public string WorkLong(int i)
{
Thread.Sleep(i);
return (string.Format("Work was done within {0} seconds.", i));
}
private void CallBack(IAsyncResult ar)
{
var del = (WorkLongDelegate) ar.AsyncState;
SetText2(del.EndInvoke(ar));
}
private void SetText2(string s)
{
if(InvokeRequired)
{
// What is the difference between BeginInvoke and Invoke in below?
BeginInvoke(new MethodInvoker(() => textBox1.Text = s));
}
else
{
textBox1.Text = s;
}
}
Invoke が実行されるまで UI スレッドを停止している間、BeginInvoke は非同期でそれを行うと述べました。しかし、それだけでは十分ではありませんでした。それにもかかわらず、代わりに Invoke を使用した場合のパフォーマンスへの影響はわかりません。誰か教えてください。