我有一个用户可以预先形成的任务列表。每个都需要一些时间,因此他们应该在后台线程上运行并将其进度报告给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方法。
答案 0 :(得分:1)
DoWork
事件是DoWorkEventHandler
要向此事件添加委托,它必须是DoWorkEventHandler
类型。
答案 1 :(得分:1)