取消订阅活动

Stu*_*urm 0 c# wpf events

我以这种方式订阅活动:

  s1.MouseUp += (s, e) =>
  {
  indexOfPointToMove = -1;
  s1.LineStyle = LineStyle.Solid;
  MyModel.RefreshPlot(false);
   e.Handled = true;
 };
Run Code Online (Sandbox Code Playgroud)

我怎么能在不同的范围内取消订阅?(但在范围内s1)

我尝试过以下方法:

s1.MouseUp = null;



s1.MouseUp -=(s,e) =>
 {
       indexOfPointToMove = -1;
       s1.LineStyle = LineStyle.Solid;
       MyModel.RefreshPlot(false);
       e.Handled = true;
  };



s1.MouseUp += (s,e) =>
{
//nothing
};
Run Code Online (Sandbox Code Playgroud)

但事件还在解决,怎么办呢?

Nik*_*vic 7

不要使用匿名事件,而是命名事件.

 s1.MouseUp += Mouse_Up;

 s1.MouseUp -=Mouse_Up;

 void Mouse_Up(object sender, MouseEventArgs ea)
 {  
    indexOfPointToMove = -1;   
    s1.LineStyle = LineStyle.Solid;  
    MyModel.RefreshPlot(false);    
    e.Handled = true;  
 }
Run Code Online (Sandbox Code Playgroud)


gza*_*axx 5

不要使用lambda来创建匿名事件处理程序.

s1.MouseUp += s1_MouseUp; //subscribe
s1.MouseUp -= s1_MouseUp; //ussubscribe


private void s1_MouseUp(object sender, MouseEventArgs e)
{
   var s1 = (ListBox)sender; //cast it to proper object
   indexOfPointToMove = -1;
   s1.LineStyle = LineStyle.Solid;
   MyModel.RefreshPlot(false);
   e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)