Recientemente tuve una de esas entrevistas realmente malas, donde juegan buen policía/policía malo contigo. Todo lo que respondí no era lo suficientemente bueno para uno de ellos y mi confianza se reducía minuto a minuto. Su pregunta final que realmente me confundió fue la siguiente:Pregunta de entrevista: cuando Control.InvokeRequired utiliza Control.Invoke o Control.BeginInvoke?
si un control necesitaría InvokeRequired ¿habría alguna diferencia en hacer .Invoke o .BeginInvoke?
Déjame mostrarte un ejemplo, como yo lo entiendo:
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;
}
}
he mencionado que BeginInvoke lo haría de forma asíncrona, mientras invocación sería detener el hilo de interfaz de usuario hasta su ejecución. Pero eso no fue lo suficientemente bueno. No obstante, no entiendo la implicación de rendimiento aquí si utilicé una Invocación. ¿Puede alguien por favor aclararme?
Debido a esto, 'Invoke' es vulnerable a interbloqueos dependiendo de la configuración de seguridad de subprocesos –