一个线程结束后,我需要执行一个我自定义的方法ccc。听说用委托回调的方法能完成,谁知道怎么写。例如:private void aaa()
{
//以前是这么写的
Thread th=new Thread(new ThreadStart(bbb));
th.Start();
}//线程中执行的方法
private void bbb()
{
//执行的代码
}//线程结束后执行的方法
private void ccc()
{
//执行的代码
}是不是应该这么写 Thread th=new Thread(里面是个委托),然后怎么判断这个委托结束了呢。
循环判读线程是否存活的那个方法我会写,请大家就别写了。
{
//以前是这么写的
Thread th=new Thread(new ThreadStart(bbb));
th.Start();
}//线程中执行的方法
private void bbb()
{
//执行的代码
}//线程结束后执行的方法
private void ccc()
{
//执行的代码
}是不是应该这么写 Thread th=new Thread(里面是个委托),然后怎么判断这个委托结束了呢。
循环判读线程是否存活的那个方法我会写,请大家就别写了。
{
//执行的代码 ccc(); //<---
}
private void aaa()
{
//以前是这么写的
Thread th=new Thread(new ThreadStart(bbb));
th.Start();
} //线程中执行的方法
private void bbb()
{
//执行的代码
if(AfterThread!=null)
AfterThread(this,null);
} //线程到这里就算是结束。
//引发事件后,再调用CCC()
//线程结束后执行的方法
private void ccc()
{
//执行的代码
}
建议LZ做下封装:
public delegate void ThreadExeHandler();
public delegate void AfterThreadExeHandler();
MyThread
{
public event ThreadExeHandler ThreadExeEvent;
public event AfterThreadExeHandler AfterThreadExeEvent;
public void Start()
{
Thread th=new Thread(new ThreadStart(startThread));
th.start();
}
private startThread()
{
if(null != ThreadExeEvent)
{
ThreadExeEvent();//你的线程函数
if(null != AfterThreadExeEvent)
{
AfterThreadExeEvent();//你线程结束时的函数
}
}
}
}
this.BeginInvoke(mydelegate, new object[] {i});传一个委托加上你需要的参数信息就ok了。
多个的话可以用WatiAll和manulResetEvent.
参考:
ManualResetEvent和AutoResetEvent用法小试
public ThreadExeHandler eventHandler;
private void aaa()
{
//以前是这么写的
Thread th=new Thread(new ThreadStart(bbb));
eventHandler = new ThreadExeHandler(ccc);
th.Start();
} //线程中执行的方法
private void bbb()
{
//执行的代码 if(eventHandler!=null) eventHandler.Invoke();
} //线程结束后执行的方法
private void ccc()
{
//执行的代码
}
也可以用同步对象进行控制