提升事件或传递代表以获取方法的反馈 - 哪个更好?

时间:2013-09-27 09:53:22

标签: c# .net

假设你有一个辅助方法,它执行一个长时间运行且复杂的数据处理任务,你从后台线程运行,你需要从方法反馈来向用户显示。您认为哪种策略最好,哪种方式?

  1. 将委托传递给方法,例如CrunchData(ShowFeedbackDelegate showFeedback)

  2. 在包含反馈讯息的方法中,在某些关键点举起一个事件(例如'处理1中的100)。

3 个答案:

答案 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)

提升事件,即为事件制作的事件,并记住,事件最后是代表......