使用自定义参数取消订阅/删除事件处理程序

Sch*_*Box 2 c# wpf events event-handling visual-studio

Event Handler我使用以下代码订阅/创建自定义:

myButton.Click += (sender, e) => MyButtonClick(sender, e, stuff1, stuff2);
Run Code Online (Sandbox Code Playgroud)


我想取消订阅/删除并尝试如下:

myButton.Click += MyButtonClick;
Run Code Online (Sandbox Code Playgroud)

但抛出以下错误:
No overload for 'MyButtonClick' matches delegate 'System.Windows.RoutedEventHandler'


像这样:

myButton.Click += MyButtonClick(sender, e, stuff1, stuff2);
Run Code Online (Sandbox Code Playgroud)

但抛出以下错误:
Cannot implicitly convert type 'void' to 'System.Windows.RoutedEventHandler'


我如何取消订阅/删除它Event Handler

Sri*_*vel 5

当您使用时,Lambda您需要保留它的参考以取消订阅。

尝试这个

RoutedEventHandler handler = (sender, e) => MyButtonClick(sender, e, stuff1, stuff2);
myButton.Click +=  handler;//Subscribe
//Some more code
myButton.Click -=  handler;//Unsubscribe
Run Code Online (Sandbox Code Playgroud)