假设你有一个辅助方法,它执行一个长时间运行且复杂的数据处理任务,你从后台线程运行,你需要从方法反馈来向用户显示。您认为哪种策略最好,哪种方式?
将委托传递给方法,例如CrunchData(ShowFeedbackDelegate showFeedback)
在包含反馈讯息的方法中,在某些关键点举起一个事件(例如'处理1中的100)。
答案 0 :(得分:0)
我会使用BackgroundWorker执行此操作:
var worker = new BackgroundWorker();
worker.DoWork += (s, e) =>
{
// do something long running
for (int i = 1; i <= records.Count; i++)
{
DisplayMessage("process " + i + " of " + records.Count);
ProcessRecord(records[i]);
}
};
worker.RunWorkerCompleted+= (s, e) =>
{
// report to user
};
worker.RunWorkerAsync();
答案 1 :(得分:0)
无需重新发明轮子,使用TPL。 在任务中包装长时间运行的操作,并使用Task.ContinueWith方法
public Task<MyCustomStatus> LongRunningOperationAsync()
{
return Task.Factory.StartNew(() =>
{
//Long Running method here
return myCustomStatus;
});
}
和外面
LongRunningOperationAsync().ContinueWith(t=>
{
if(t.Exception == null)
{
//Something bad happen
}
//Task finished
});
TPL为您提供足够的灵活性来解决大多数异步问题
答案 2 :(得分:0)
提升事件,即为事件制作的事件,并记住,事件最后是代表......