http://blog.163.com/chs1987@126/blog/static/68709178201110149343148/?suggestedreading&wumii
用了BackGroundWorker一段时间,发现自己还是没有掌握它的精髓,很不爽。更令人苦恼的是BackGroundWorker的Cancel功能不太好用,最终只好自己写了一个类似BackGroundWorker的类,虽然失去了BackGroundWorker的很多功能和特性,但目前一般用用还是足够了。
其实也很简单,只不过是对线程进行了简单的封装,使用起来比较方便而已。
namespace Test
{
public delegate void Work(object data);
public delegate void WorkCompleted();
public class BackGroundThread
{
public Work Work;
public WorkCompleted WorkCompleted;
//线程的创建者
public Control Master;
private Thread tWork;
public void RunWork()
{
RunWork(null);
}
public void RunWork(object parameter)
{
CancelWorkAsync();
tWork = new Thread(new ParameterizedThreadStart(WorkEntry));
tWork.IsBackground = true;
tWork.Start(parameter);
}
public void CancelWorkAsync()
{
if (tWork != null && tWork.IsAlive)
{
tWork.Abort();
}
tWork = null;
}
private void WorkEntry(object data)
{
if (Work != null)
{
Work(data);
}
if (WorkCompleted != null)
{
if (Master == null)
{
WorkCompleted();
}
else
{
Master.BeginInvoke(new DelWorkComplete(delegate()
{
WorkCompleted();
}));
}
}
}
private delegate void DelWorkComplete();
}
}