c# unsubscribe from timer event不起作用


[Inject]
public Timer timer { get; set; }
protected override void OnInitialized()
{
settingsModel = applicationDb.SettingsModal.FirstOrDefault();
updateInfo();
}
public async void updateInfo()
{
try
{
if (settingsModel.Message != "" && settingsModel.Message != null)
{
timer.Elapsed -= (w, e) => timer_Elapsed(w,e);
timer.Elapsed += (w, e) => timer_Elapsed(w, e);          
timer.Interval = 3000;
timer.Start();
}
else
{
timer.Elapsed -= (w, e) => timer_Elapsed(w, e);
timer.Stop();
}
}
catch (Exception e)
{
ToastService.ShowError(e.Message);
}
}
async void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{       
// do some stuff
}

问题是退订在这一行不起作用

timer.Elapsed -= new System.Timers.ElapsedEventHandler(timer_Elapsed);

每次调用UpdateInfo方法时,事件timer.Elapsed获得更多子

订阅方法而不是匿名函数

// Subscribe
timer.Elapsed += timer_Elapsed; 
// Unsubscribe
timer.Elapsed -= timer_Elapsed;

从本页订阅事件

如果以后不需要取消订阅某个事件,可以使用加法赋值操作符(+=)附加一个匿名函数作为事件处理程序。

如果您使用匿名函数来订阅事件,则无法轻松取消订阅。

我们建议你不要使用匿名函数来订阅事件,如果你必须在稍后的代码中取消订阅事件。

最新更新