删除在 Windows 10 通用应用程序中不起作用的事件处理程序
Removing Event Handler Not Working in Windows 10 Universal App
您好,我有一个动态创建的点击按钮,它将在 windows 通用应用程序中下载视频,而创建按钮时我在事件处理程序上分配如下:
videoIcon.Click += (s, ev) => { Download_Video(s, ev, SomeStringParameter1, SomeStringParameter2); };
一旦用户点击按钮,在 Download_Video 中,我将删除事件处理程序以下载视频,如下所示:
Button videoIcon = sender as Button;
videoIcon.Click -= (s, ev) => { Download_Video(s, ev, videoUrl, messageId); };
并分配新的事件处理程序以在单击相同按钮时播放视频,如下所示:
videoIcon.Click += (s, ev) => { Video_Click(s, ev, savedFile.Name); };
问题是之前分配的处理程序 Download_Video 也与 Video_Click 一起触发。如何阻止它?
据我所知,这与 Windows10 无关。您无法取消订阅匿名事件处理程序,如 this question 所述。
相反,只需保留对委托的引用:
RoutedEventHandler handler = (s, ev) => { Download_Video(s, ev, videoUrl, messageId); };
videoIcon.Click += handler;
videoIcon.Click -= handler;
您好,我有一个动态创建的点击按钮,它将在 windows 通用应用程序中下载视频,而创建按钮时我在事件处理程序上分配如下:
videoIcon.Click += (s, ev) => { Download_Video(s, ev, SomeStringParameter1, SomeStringParameter2); };
一旦用户点击按钮,在 Download_Video 中,我将删除事件处理程序以下载视频,如下所示:
Button videoIcon = sender as Button;
videoIcon.Click -= (s, ev) => { Download_Video(s, ev, videoUrl, messageId); };
并分配新的事件处理程序以在单击相同按钮时播放视频,如下所示:
videoIcon.Click += (s, ev) => { Video_Click(s, ev, savedFile.Name); };
问题是之前分配的处理程序 Download_Video 也与 Video_Click 一起触发。如何阻止它?
据我所知,这与 Windows10 无关。您无法取消订阅匿名事件处理程序,如 this question 所述。
相反,只需保留对委托的引用:
RoutedEventHandler handler = (s, ev) => { Download_Video(s, ev, videoUrl, messageId); };
videoIcon.Click += handler;
videoIcon.Click -= handler;