在我的代码中,我需要注销和注册一个事件处理程序。这个方法非常完美:
_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
}
但对于可等待的事件处理程序,我必须使用这种语法:
_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
}
这是行不通的。因为匿名方法没有相同的引用。因此,第一行无法取消已注册的处理程序。最终,第二行会向单击事件添加额外的事件处理程序。
我需要使用哪种语法来添加和删除异步事件处理程序?
感谢任何建议。
_favoritsImageView_Click
是一个返回委托的方法,但这样做真的很奇怪。 - svick_favoritsImageView_Click
。有什么问题吗? - a.toraby_favoritsImageView.Click += _favoritsImageView_Click(this, new CustomeClickEventArgs(item));
这一行无法编译。 - svick