using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Drawing.Drawing2D;
using System.Threading;
namespace Test
...{
public partial class Form1 : Form
...{
public Form1()
...{
InitializeComponent();
}
private Thread myThread;
private void RunsOnWorkerThread()
...{
for (int i = 0; i < 100; i++)
...{
ShowProgress(Convert.ToString(i) + "%", i);
Thread.Sleep(100);
}
}
public void ShowProgress(string msg, int percentDone)
...{
// Wrap the parameters in some EventArgs-derived custom class:
System.EventArgs e = new MyProgressEvents(msg, percentDone);
object[] pList = ...{ this, e };
BeginInvoke(new MyProgressEventsHandler(UpdateUI), pList);
}
private delegate void MyProgressEventsHandler(object sender, MyProgressEvents e);
private void UpdateUI(object sender, MyProgressEvents e)
...{
this.label1.Text = e.Msg;
this.progressBar1.Value = e.PercentDone;
}
public class MyProgressEvents : EventArgs
...{
public string Msg;
public int PercentDone;
public MyProgressEvents(string msg, int per)
...{
Msg = msg;
PercentDone = per;
}
}
//開始線程
private void button1_Click(object sender, EventArgs e)
...{
myThread = new Thread(new ThreadStart(RunsOnWorkerThread));
myThread.Start();
}
private void button2_Click(object sender, EventArgs e)
...{
if (myThread != null && myThread.IsAlive)
myThread.Suspend();//線程掛起
myThread.Priority = ThreadPriority.Lowest;
}
private void button3_Click(object sender, EventArgs e)
...{
if (myThread != null && myThread.IsAlive)
myThread.Resume();//繼續線程
}
private void button4_Click(object sender, EventArgs e)
...{
if (myThread != null && myThread.IsAlive)
myThread.Abort();//線程終止
}
}
}
參見://http://blog.csdn.net/chendazhi/archive/2006/05/09/715064.aspx