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.youkuaiyun.com/chendazhi/archive/2006/05/09/715064.aspx