ReportProgress
メソッドに複数のパラメータを渡すにはどうすればよいですか? 私はこのガイドに従っていた:MSDN進捗バーを作成する。私のコードはこのように見えます。非同期で複数のパラメータをReportProgressメソッドに渡す
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
のための過負荷は、私の実際のアプリケーションでは、私はObersableCollection<User>
を持っていますので、私は、このようにそれをしようとしていた2つの引数
をとります。多分私が行くべきより良い方法はありますか?
進捗alreayを報告するために複数の値を渡します複数の値を報告することができます。 'int'ではなく、' Tuple 'の代わりに必要なフィールドを持つクラスを使ってください。 –
@PanagiotisKanavosそれは動作します。どうもありがとう! – MyNewName
なぜObservableCollectionに加入する代わりに 'Progress'を使用していますか?コードが進行状況を報告していない場合、コレクションの変更に応じて別のDTOが更新されます。たとえば、バインディングが気になる場合、WPF *はコレクションの変更に自身を更新します –