El método más simple para compartir datos entre diferentes hilos es shared data
de la siguiente manera (algunos es pseudo có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;
}
}
Puede leer acerca de este método en this nice introduction about multithreading, sin embargo, prefería leer sobre esto en el O'Reilly book C# 3.0 in a nutshell
, por los hermanos Albahari (2007), que también es de acceso libre en Google Books, al igual que la versión más reciente del libro, porque también cubre la agrupación de subprocesos, primer plano contra hilos de fondo, etc. código de ejemplo. (Descargo de responsabilidad: tengo una copia desgastada de este libro)
En caso de que esté haciendo una aplicación WinForms, el uso de datos compartidos es especialmente útil, porque los controles WinForm no son seguros para subprocesos.Al usar una devolución de llamada para pasar datos del hilo de trabajo a un control WinForm, el hilo de la interfaz de usuario principal necesita un código feo con Invoke()
para que ese control sea seguro para la ejecución de subprocesos. Utilizando datos compartidos en su lugar, y el System.Windows.Forms.Timer
de subproceso único, con un Interval
corto de, digamos, 0.2 segundos, puede enviar fácilmente información desde el subproceso de trabajo al control sin Invoke
.
Lo siento pero olvidé mencionar que estoy usando .NET 3.5. Según mi entendimiento Tarea es 4.0 cosa? –
@SilverlightStudent Ok, acabo de actualizar mi respuesta para satisfacer sus requisitos. – oxilumin
@oxilumin: Gracias y muy apreciado. Una pregunta de seguimiento más. Si su método Test() también toma algunos argumentos, ¿cómo modificará el método SafeExecute para esos argumentos? –