Editar: Parece que tengo que recuperar lo que escribí antes. Intentado el siguiente:
añadido un cuadro de texto denominado myTextBox
y trató de recuperar el valor de la propiedad Text
:
Thread t = new Thread(
o =>
{
Thread.Sleep(2000);
string value = myTextBox.Text;
Thread.Sleep(2000);
});
t.Start();
Y parece que la aplicación (WPF) se bloquea después de 2 segundos. Utilizando el despachador funciona:
Thread t = new Thread(
o =>
{
Thread.Sleep(2000);
myTextBox.Dispatcher.BeginInvoke(
(Action)(() => { string value = myTextBox.Text; }));
Thread.Sleep(2000);
});
t.Start();
Por lo tanto, usted todavía tiene que pasar por el hilo despachador al leer los valores de los componentes GUI, al menos en WPF.
Segunda edición: Esto se pone mejor. Al parecer, repetir el experimento para WinForms clásicos revela que funciona para leer la propiedad Text
sin usar Invoke/BeginInvoke
. Curiosamente, parece que también la configuración de la propiedad funciona bien (sin invocar), aunque apostaría a que no es seguro para subprocesos y la aplicación no se queja por alguna razón.
En pocas palabras: Es una buena idea en cualquier caso de usar el despachador al interactuar con los componentes de la GUI de otros hilos, ya que garantiza las lecturas/escrituras son serializado a un solo hilo y por lo que no tienen hilos de seguridad cuestiones.
puede usar los delegados para hacer eso – jorne
@CodeCaster Solo intente y vea lo que funciona generalmente no le proporciona código seguro para subprocesos. – hvd
@hvd: Pero satisface todas las preguntas planteadas _aquí_. –