Nel mio codice ho bisogno di annullare la registrazione e registrare un gestore di eventi, questo funziona perfetto:Come annullare la registrazione e registrare un gestore eventi attendibile?
_favoritsImageView.Click -= _favoritsImageView_Click(this, new CustomeClickEventArgs(item));
_favoritsImageView.Click += _favoritsImageView_Click(this, new CustomeClickEventArgs(item));
void _favoritsImageView_Click(object sender, CustomeClickEventArgs e)
{
// handles the event
}
Ma per un awaitable gestore eventi devo usare questa sintassi:
_favoritsImageView.Click -= async (s, e) =>
{ await _favoritsImageView_ClickAsync(s, new CustomeClickEventArgs(item)); };
_favoritsImageView.Click += async (s, e) =>
{ await _favoritsImageView_ClickAsync(s, new CustomeClickEventArgs(item)); };
async Task _favoritsImageView_ClickAsync(object sender, CustomeClickEventArgs e)
{
// does async task
}
Questo fa non funziona. Perché i metodi anonimi non hanno lo stesso riferimento. Quindi la prima riga non annulla la registrazione del gestore già registrato. E alla fine la seconda riga aggiunge un gestore di eventi extra al clic.
Quale sintassi è necessario utilizzare per aggiungere e rimuovere un gestore di eventi asincroni?
Grazie per qualsiasi suggerimento.
Sono confuso, la sintassi che si dice "funziona perfettamente" non può funzionare. A meno che '_favoritsImageView_Click' fosse un metodo che restituisce un delegato, il che sarebbe davvero strano. – svick
@svick Ho aggiunto '_favoritsImageView_Click' al codice di esempio. Cosa c'è che non va?? –
Ciò che è sbagliato è che la riga '_favoritsImageView.Click + = _favoritsImageView_Click (questo, nuovo CustomeClickEventArgs (elemento));' non verrà compilato. – svick