using System;
using System.Threading;
using System.Windows.Forms;
using System.IO;
namespace ProcessData
{
public partial class Form1 : Form
{
private System.Threading.Thread _thread;
public Form1()
{
InitializeComponent();
}
public delegate void UpdateLabelTextCallback(Label box, string msg);
/// <summary>
/// Allows threads to update text on a label
/// </summary>
/// <param name="lbl"></param>
/// <param name="msg"></param>
private void UpdateLabelText(Label lbl, string msg)
{
lbl.Text = msg;
}
/// <summary>
/// Function that processes data
/// </summary>
private void btnProcessData_Click(object sender, EventArgs e)
{
lblStatus.Invoke(new UpdateLabelTextCallback(this.UpdateLabelText), new object[] { lblStatus, string.Format("Starting to process…") });
ThreadStart TS;
try
{
TS = new ThreadStart(ProcessData);
_thread = new Thread(TS);
_thread.Start();
}
catch (Exception E)
{
MessageBox.Show(string.Format("{0} {1} {2}", E.Message.ToString(), E.Source.ToString(), E.StackTrace.ToString()));
_thread.Abort();
}
}
/// <summary>
/// Function that processes data
/// </summary>
private void ProcessData()
{
int iMax = 10;
for (int i=1; i<=iMax; i++)
{
Thread.Sleep(500);
lblStatus.Invoke(new UpdateLabelTextCallback(this.UpdateLabelText), new object[] { lblStatus, string.Format("Processing {0} or {1}", i, iMax) });
}
lblStatus.Invoke(new UpdateLabelTextCallback(this.UpdateLabelText), new object[] { lblStatus, string.Format("Finished processing…") });
}
}
}