【发布时间】:2017-03-13 08:23:34
【问题描述】:
如何将多个参数传递给ReportProgress 方法?
我按照本指南:MSDN 创建进度条。我的代码如下所示。
MainWindow.xaml
public User User { get; set; }
public MainWindow()
{
InitializeComponent();
this.User = new User();
this.DataContext = User;
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
var progressIndicator = new Progress<int>(ReportProgress); //here is the error
await this.User.ReadUsers(progressIndicator, this.User)
}
void ReportProgress(int value, User pUser)
{
this.User.Val = value;
}
User.xaml
public async Task<bool> ReadUsers(IProgress<int> pProgress, User pUser)
{
for (int i = 1; i < 11; i++)
{
await Task.Delay(500);
pProgress.Report(i, pUser);
}
return true;
}
如您所见,我试图在ReportProgress 方法中简单地添加一个新参数(User pUser)。现在我在Button_Click 方法中遇到错误(标记了行)。
参数 1:无法从方法组转换为 System.Action
“System.Progress.Progress(System.Action)”的最佳重载方法匹配 - 方法有一些无效参数
Report-Method没有重载需要 2 个参数
我是这样尝试的,因为在我的实际应用程序中我会有一个ObersableCollection<User>。有没有更好的办法?
【问题讨论】:
-
Progress alreay 允许您报告多个值。只需使用包含所需字段的类,而不是
int,甚至是Tuple<int,string>。 -
@PanagiotisKanavos 它有效。非常感谢!
-
你为什么使用
Progress而不是订阅ObservableCollection?您的代码没有报告进度,它会更新另一个 DTO 以响应对集合的更改。例如,如果您关心绑定,WPF 确实更新自身以更改集合 -
是的,我正在使用绑定。你能给我一个使用
ObservableCollection的小例子吗? (我 - 想 - 我知道如何一般使用它,但我不知道在这种情况下如何使用它)
标签: c# wpf asynchronous