Cuando uso la interfaz de operación multiproceso de C#, la interfaz no se bloquea cuando uso Invoke, pero ¿por qué se bloquea cuando uso BeginInvoke?
Esto involucra el mecanismo del formulario winform para enviar mensajes cíclicos. A continuación se proporciona un enlace a una explicación detallada. Si está interesado, puede echar un vistazo.
En cuanto a este problema, puedes entenderlo de esta manera:
Invoke necesita esperar a que se complete el método SetValue antes de ingresar al siguiente ciclo.
BeginInvoke notifica que se va a ejecutar el método SetValue, pero vuelve a entrar en el bucle sin esperar a que se ejecute SetValue.
Puedes agregar Thread.Sleep(50); después de BeginInvoke;
La interfaz de la tarjeta BeginInvoke es diferente de la incapacidad del hilo secundario para acceder a la interfaz de la tarjeta del hilo principal. La primera está demasiado ocupada y el segundo es demasiado vago para actualizar la interfaz mientras espera.
Dirección del enlace: blogs.com/fuchongjundream/p/3939298.html