如何抽象方法的调用

时间:2011-05-04 11:39:56

标签: c# architecture abstraction

我有一个用户可以预先形成的任务列表。每个都需要一些时间,因此他们应该在后台线程上运行并将其进度报告给UI线程。

我的问题是如何以某种抽象的方式实现这一点(没有大开关)。

我现在拥有的是课程任务

public class Task {
    public string Name { get; set; }
    public ??? Action { get; set; } // Doesn't compile
}

一个ListBox,其中包含将在SelectionChanged上绘制表示任务(TaskUC)的UserControl的所有任务。此UserControl具有一个执行事件(TaskUC.Execute += TaskExecute),当用户想要执行任务时触发该事件。

我的问题在这里。在TaskExecute方法中,我想初始化一个BackgroundWorker,其中应该在Task.Action中定义DoWork Handler。像这样:

private void TaskExecute(object sender, RoutedEventArgs e) {
    Task task = (Task) e.OriginalSource;

    BackgroundWorker worker = new BackgroundWorker();
    worker.WorkerReportsProgress = true;
    worker.RunWorkerCompleted += WorkerRunWorkerCompleted;
    worker.DoWork += task.Action; // Doesn't compile

    worker.RunWorkerAsync();
}

在处理TaskExecute的同一个类上有处理每个任务的方法。

private void Task1(object sender, DoWorkEventArgs e) {}

因此,如果用户选择第一个任务,我需要将Task.Action映射到Task1方法。

2 个答案:

答案 0 :(得分:1)

DoWork事件是DoWorkEventHandler 要向此事件添加委托,它必须是DoWorkEventHandler类型。

答案 1 :(得分:1)

我的建议是不重新发明 Task。使用Task<T>封装您要查找的所有内容。

看看here


但是对于答案,SLaks的回答是正确的。