Uso de Visual C# para crear un subproceso
Puede escribir aplicaciones multiproceso en Microsoft Visual C# .NET o en Visual C#. En este artículo se describe cómo una sencilla aplicación de Visual C# puede crear y administrar subprocesos.
Versión original del producto: Visual C#
Número de KB original: 815804
Requisitos
En la lista siguiente se describen los hardware, software, infraestructura de red y service packs recomendados que necesita:
- Windows o Windows Server
- Visual C# .NET o Visual C#
En este artículo se supone que está familiarizado con los temas siguientes:
- Programación de Visual C#
- Entorno de desarrollo integrado (IDE) de Visual Studio para .NET o IDE de Visual Studio
En este artículo se hace referencia al espacio de nombres System.Threading
de la biblioteca de clases de .NET Framework .
Creación de una aplicación de Visual C# con subprocesos
Inicie Visual Studio .NET, Visual Studio o Visual C# Express Edition.
Cree un nuevo proyecto de aplicación windows de Visual C# denominado ThreadWinApp.
Agregue un control Button al formulario. De forma predeterminada, el botón se denomina Button1.
Agregue un componente ProgressBar al formulario. De forma predeterminada, la barra de progreso se denomina ProgressBar1.
Haga clic con el botón derecho en el formulario y, a continuación, haga clic en Ver código.
Agregue la siguiente instrucción al principio del archivo:
using System.Threading;
Agregue el siguiente
button1_Click
controlador de eventos para Button1:private void button1_Click(object sender, System.EventArgs e) { MessageBox.Show("This is the main thread"); }
Agregue la siguiente variable a la
Form1
clase :private Thread trd;
Agregue el siguiente método a la clase
Form1
:private void ThreadTask () { int stp; int newval; Random rnd = new Random (); while (true) { stp = this.progressBar1.Step * rnd.Next (-1, 2); newval = this.progressBar1.Value + stp; if (newval > this.progressBar1.Maximum) newval = this.progressBar1.Maximum; else if (newval < this.progressBar1.Minimum) newval = this.progressBar1.Minimum; this.progressBar1.Value = newval; Thread.Sleep (100); } }
Nota:
Este es el código que subyace al subproceso. Este código es un bucle infinito que incrementa o disminuye aleatoriamente el valor en ProgressBar1 y, a continuación, espera 100 milisegundos antes de continuar.
Agregue el siguiente
Form1_Load
controlador de eventos para Form1. Este código crea un nuevo subproceso, convierte el subproceso en segundo plano y, a continuación, inicia el subproceso.private void Form1_Load(object sender, System.EventArgs e) { Thread trd = new Thread(new ThreadStart(this.ThreadTask)); trd.IsBackground = true; trd.Start(); }
Comprobación de que funciona
Compile y ejecute la aplicación. Observe que el valor de ProgressBar1 cambia aleatoriamente. Este es el nuevo subproceso en funcionamiento.
Para demostrar que el subproceso principal es independiente del subproceso que cambia el valor de ProgressBar1, haga clic en el botón del formulario. Recibirá un cuadro de diálogo con el siguiente mensaje de error:
Este es el subproceso principal
Espere a la entrada. Observe que el valor de ProgressBar1continues que se va a cambiar.
Solución de problemas
En aplicaciones más complejas, asegúrese de sincronizar varios subprocesos al acceder a variables compartidas. Para obtener más información, consulte la instrucción lock y los temas relacionados en la documentación de ayuda en línea de Visual C# para .NET.
Referencias
Para obtener más información, vea Clase thread.