¿En qué circunstancias la actualización de un control de UI desde un subproceso no relacionado con la interfaz de usuario podría provocar que los identificadores de los procesos aumentaran continuamente al usar un delegado y .InvokeRequired
?Subproceso de interfaz de usuario. Invoke() que causa la pérdida de identificadores?
Por ejemplo:
public delegate void DelegateUIUpdate();
private void UIUpdate()
{
if (someControl.InvokeRequired)
{
someControl.Invoke(new DelegateUIUpdate(UIUpdate));
return;
}
// do something with someControl
}
Cuando esto se llama en un bucle o en los intervalos de temporización, las asas para el programa aumentan constantemente.
EDIT:
Si lo anterior es un comentario y modificado como tales:
public delegate void DelegateUIUpdate();
private void UIUpdate()
{
//if (someControl.InvokeRequired)
//{
// someControl.Invoke(new DelegateUIUpdate(UIUpdate));
// return;
//}
CheckForIllegalCrossThreadCalls = false;
// do something with someControl
}
... entonces las asas detener la incrementación, sin embargo no quiero para permitir cruz llamadas de hilo, por supuesto.
EDIT 2:
Aquí está un ejemplo que muestra las asas aumentan:
Thread thread;
private delegate void UpdateGUI();
bool UpdateTheGui = false;
public Form1()
{
InitializeComponent();
thread = new Thread(new ThreadStart(MyThreadLoop));
thread.Start();
}
private void MyThreadLoop()
{
while (true)
{
Thread.Sleep(500);
if (UpdateTheGui)
{
UpdateTheGui = false;
UpdateTheGuiNow();
}
}
}
private void UpdateTheGuiNow()
{
if (label1.InvokeRequired)
{
label1.Invoke(new UpdateGUI(UpdateTheGuiNow));
return;
}
label1.Text = DateTime.Now.ToString("MM-dd-yyyy HH:mm:ss");
label2.Text = DateTime.Now.ToString("MM-dd-yyyy HH:mm:ss");
label3.Text = DateTime.Now.ToString("MM-dd-yyyy HH:mm:ss");
}
private void btnInvoke_Click(object sender, EventArgs e)
{
UpdateTheGui = true;
}
Tengo el mismo problema aquí, con exactamente la misma llamada en un temporizador. Gracias por mencionar CheckForIllegalCrossThreadCalls porque nunca había oído hablar de él antes. – muusbolla