c#异步操作后台运行(backgroundworker类)示例
c#异步操作,backgroundworker类的使用,可以在后台运行需要的代码逻辑。
using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.linq;
using system.text;
using system.threading;
using system.windows.forms;
namespace testbackgroundwork
{
public partial class form1 : form
{
public form1()
{
initializecomponent();
initializebackgoundworker();
}
private backgroundworker backgroundworker1;
private void initializebackgoundworker()
{
this.backgroundworker1 = new system.componentmodel.backgroundworker();
this.backgroundworker1.workerreportsprogress = true;
this.backgroundworker1.workersupportscancellation = true;
this.backgroundworker1.dowork += new doworkeventhandler(backgroundworker1_dowork);
this.backgroundworker1.progresschanged += new progresschangedeventhandler(backgroundworker1_progresschanged);
this.backgroundworker1.runworkercompleted += new runworkercompletedeventhandler(backgroundworker1_runworkercompleted);
}
//**********backgroundworker1的回调函数**********
void backgroundworker1_dowork(object sender, doworkeventargs e)
{
backgroundworker worker = sender as backgroundworker;
for (int i = 1; i <= 10; i++)
{
if (worker.cancellationpending)
{
e.cancel = true;
}
else
{
thread.sleep(500);
int percentcomplete = (int)((float)i / (float)10 * 100);
worker.reportprogress(percentcomplete);
}
}
}
void backgroundworker1_progresschanged(object sender, progresschangedeventargs e)
{
this.progressbar1.value = e.progresspercentage;
}
void backgroundworker1_runworkercompleted(object sender, runworkercompletedeventargs e)
{
if (e.error != null)
{
messagebox.show(e.error.message);
}
else if (e.cancelled)
{
resultlabel.text = "canceled";
}
else
{
resultlabel.text = "completed";
}
startbtn.enabled = true;
stopbtn.enabled = false;
}
//**********backgroundworker1的回调函数**********
private void startbtn_click(object sender, eventargs e)
{
resultlabel.text = string.empty;
this.startbtn.enabled = false;
this.stopbtn.enabled = true;
//启动异步操作.
backgroundworker1.runworkerasync();
}
private void stopbtn_click(object sender, eventargs e)
{
backgroundworker1.cancelasync();
}
}
}
下一篇: SparkContext源码分析