/*
需要明确Form知道线程结束后要干什么。
举个例子:
比如我需要在线程结束之后,刷新Form上Label的内容。
这样,可以定义一个delegate,让线程结束之后回调刷新Label这个方法。
以下是示例代码,Class1也可以是Form这个类。
*/
class Class1
{
[STAThread]
static void Main(string[] args)
{
Class1 c = new Class1();
ThreadWrapper tw = new ThreadWrapper(new Callback(c.PrintResult), 100);
// 线程开始
tw.Start();
Console.ReadLine();
}
// 打印结果,用于回调
public void PrintResult(int result)
{
Console.WriteLine("Result: " + result.ToString());
}
}
// 回调代理
public delegate void Callback(int n);
class ThreadWrapper
{
public readonly Thread mThread;
private Callback callback;
private int n;
// 参数1:用于回调的代理
// 参数2:需要计算的值
public ThreadWrapper(Callback callback, int arg)
{
this.callback = callback;
ThreadStart myThreadDelegate = new ThreadStart(this.Run);
this.mThread = new Thread(myThreadDelegate);
this.n = arg;
}
// 线程的对外接口
public void Start()
{
this.mThread.Start();
}
// 需要在线程里调用的方法
public void Run()
{
int result = this.Caculate(this.n);
callback(result);
}
private int Caculate(int n)
{
return n*100;
}
}
需要明确Form知道线程结束后要干什么。
举个例子:
比如我需要在线程结束之后,刷新Form上Label的内容。
这样,可以定义一个delegate,让线程结束之后回调刷新Label这个方法。
以下是示例代码,Class1也可以是Form这个类。
*/
class Class1
{
[STAThread]
static void Main(string[] args)
{
Class1 c = new Class1();
ThreadWrapper tw = new ThreadWrapper(new Callback(c.PrintResult), 100);
// 线程开始
tw.Start();
Console.ReadLine();
}
// 打印结果,用于回调
public void PrintResult(int result)
{
Console.WriteLine("Result: " + result.ToString());
}
}
// 回调代理
public delegate void Callback(int n);
class ThreadWrapper
{
public readonly Thread mThread;
private Callback callback;
private int n;
// 参数1:用于回调的代理
// 参数2:需要计算的值
public ThreadWrapper(Callback callback, int arg)
{
this.callback = callback;
ThreadStart myThreadDelegate = new ThreadStart(this.Run);
this.mThread = new Thread(myThreadDelegate);
this.n = arg;
}
// 线程的对外接口
public void Start()
{
this.mThread.Start();
}
// 需要在线程里调用的方法
public void Run()
{
int result = this.Caculate(this.n);
callback(result);
}
private int Caculate(int n)
{
return n*100;
}
}