Voo*_*ild 1 c# backgroundworker
在我的课程中,我注意到下面的模式.我怎么能把它抽象出来呢?有什么建议?
private void InitializeClass()
{
BackgroundWorker bgw1 = new BackgroundWorker();
bgw1.DoWork += (s,e) =>
{
// doing work
};
BackgroundWorker bgw2 = new BackgroundWorker();
bgw2.DoWork += (s,e) =>
{
// doing work
};
BackgroundWorker bgw3 = new BackgroundWorker();
bgw3.DoWork += (s,e) =>
{
// doing work
};
bgw1.RunWorkerAsync();
bgw2.RunWorkerAsync();
bgw3.RunWorkerAsync();
}
Run Code Online (Sandbox Code Playgroud)
public static class Worker
{
public static void Execute(params DoWorkEventHandler[] handlers)
{
foreach (DoWorkEventHandler handler in handlers)
{
BackgroundWorker worker = new BackgroundWorker();
DoWorkEventHandler capturedHandler = handler;
worker.DoWork += (sender, e) =>
{
try
{
capturedHandler(sender, e);
}
finally
{
worker.Dispose();
}
};
worker.RunWorkerAsync();
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
Worker.Execute((s, e) =>
{
// doing work
});
Run Code Online (Sandbox Code Playgroud)
或者如果您想安排多个活动:
Worker.Execute(
(s, e) =>
{
// doing work
},
(s, e) =>
{
// doing work
},
(s, e) =>
{
// doing work
}
);
Run Code Online (Sandbox Code Playgroud)
更新:
这是一个允许您指定已完成的处理程序的替代方法:
public class Worker
{
public Worker Work(DoWorkEventHandler doWork, RunWorkerCompletedEventHandler complete)
{
var worker = new BackgroundWorker();
worker.DoWork += doWork;
worker.RunWorkerCompleted += complete;
worker.RunWorkerAsync();
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
new Worker()
.Work((s, e) => { /** some work **/ }, (s, e) => { /** work completed **/ })
.Work((s, e) => { /** some work **/ }, (s, e) => { /** work completed **/ })
.Work((s, e) => { /** some work **/ }, (s, e) => { /** work completed **/ });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
455 次 |
| 最近记录: |