Created
June 18, 2014 18:24
-
-
Save Fhernd/919751b4fae2e67161c5 to your computer and use it in GitHub Desktop.
Demostración de Thread con WinForms. En C#.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Drawing; | |
using System.Threading; | |
using System.Windows.Forms; | |
namespace Recetas.Multithreading.Cap01 | |
{ | |
public partial class ThreadProgressBar : Form | |
{ | |
private System.ComponentModel.Container components = null; | |
private Button btnMostrarMensaje; | |
private ProgressBar pbrProgreso; | |
public ThreadProgressBar() | |
{ | |
InitializeComponent(); | |
} | |
protected override void Dispose(bool disposing) | |
{ | |
if (disposing) | |
{ | |
if (components != null) | |
{ | |
components.Dispose (); | |
} | |
} | |
base.Dispose (disposing); | |
} | |
private void InitializeComponent () | |
{ | |
this.FormBorderStyle = FormBorderStyle.FixedDialog; | |
this.Load += new EventHandler(frmThreadProgressBar_Load); | |
this.MinimizeBox = false; | |
this.Name = "FrmThreadProgressBar"; | |
this.Size = new Size(300, 300); | |
this.StartPosition = FormStartPosition.CenterScreen; | |
btnMostrarMensaje = new Button(); | |
btnMostrarMensaje.Click += new EventHandler (btnMostrarMensaje_Click); | |
btnMostrarMensaje.Location = new Point (13, 13); | |
btnMostrarMensaje.Name = "btnMostrarMensaje"; | |
btnMostrarMensaje.Size = new Size (120,23); | |
btnMostrarMensaje.Text = "Mostrar Mensaje"; | |
// Crea la barra de progreso: | |
pbrProgreso = new ProgressBar(); | |
pbrProgreso.Location = new Point (13, 53); | |
pbrProgreso.Name = "pbrProgreso"; | |
this.Controls.Add (btnMostrarMensaje); | |
this.Controls.Add (pbrProgreso); | |
} | |
// Este método incrementa o decrementa la barra de progreso de | |
// forma aleatoria. El propósito es demostrar que podemos | |
// usar un thread para otros componentes y la interfaz no se bloquea: | |
private void TareaThread() | |
{ | |
int avance; | |
int nuevoValor; | |
Random aleatorio = new Random(); | |
while (true) | |
{ | |
avance = pbrProgreso.Step * aleatorio.Next(-1, 2); | |
nuevoValor = pbrProgreso.Value + avance; | |
if (nuevoValor > pbrProgreso.Maximum) | |
{ | |
nuevoValor = pbrProgreso.Maximum; | |
} | |
else if (nuevoValor < pbrProgreso.Minimum) | |
{ | |
nuevoValor = pbrProgreso.Minimum; | |
} | |
pbrProgreso.Value = nuevoValor; | |
Thread.Sleep (100); | |
} | |
} | |
#region Eventos | |
// Este método se encarga de mostrar un mensaje cada vez que el | |
// botón `btnMostrarMensaje` es activado por parte del usuario. | |
// Independiente de que se esté llevando una tarea simultánea en | |
// segundo plano el método podrá invocarse sin ninguna restricción: | |
private void btnMostrarMensaje_Click(object sender, EventArgs e) | |
{ | |
MessageBox.Show ("Este mensaje es mostrado desde el thread principal."); | |
} | |
// Cuando el formulario se carga, inmediatamente se crea una instancia | |
// de Thread para invocar de forma simultánea el método TareaThread: | |
private void frmThreadProgressBar_Load(object sender, EventArgs e) | |
{ | |
Thread thread = new Thread (new ThreadStart(TareaThread)); | |
thread.IsBackground = true; | |
thread.Start(); | |
} | |
#endregion | |
public static void Main() | |
{ | |
Application.EnableVisualStyles(); | |
Application.Run (new ThreadProgressBar()); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment