El método más simple para compartir datos entre diferentes hilos es el shared data
siguiente (algunos son pseudocódigo):
class MyThread
{
public string SharedData;
public void Worker()
{
...lengthy action, infinite loop, etc...
SharedData = "whatever";
...lengthy action...
return;
}
}
class Program
{
static void Main()
{
MyThread m = new MyThread();
Thread WorkerThread = new Thread(m.Worker);
WorkerThread.Start();
loop//or e.g. a Timer thread
{
f(m.SharedData);
}
return;
}
}
Puedes leer sobre este método en esta bonita introducción sobre el multihilo , sin embargo, preferí leer sobre esto en el O'Reilly book C# 3.0 in a nutshell
, de los hermanos Albahari (2007), que también es de libre acceso en Google Books, al igual que la versión más reciente del libro, porque también cubre la agrupación de subprocesos, subprocesos en primer plano frente a subprocesos en segundo plano, etc., con un código de ejemplo agradable y simple. (Descargo de responsabilidad: tengo una copia gastada de este libro)
En caso de que esté creando una aplicación WinForms, el uso de datos compartidos es especialmente útil, porque los controles de WinForm no son seguros para subprocesos. Al usar una devolución de llamada para pasar datos del hilo de trabajo a un control de WinForm, el hilo de la interfaz de usuario principal necesita un código desagradable Invoke()
para que ese control sea seguro para los hilos. En su lugar, utilizando datos compartidos y el subproceso único System.Windows.Forms.Timer
, con menos Interval
de 0,2 segundos, puede enviar fácilmente información desde el subproceso de trabajo al control sin él Invoke
.