在控件中注册事件处理程序时如何防止内存泄漏

时间:2017-12-09 16:36:43

标签: c# wpf memory-management memory-leaks event-handling

我创建了一个键盘,它具有触摸屏界面的递增和递减按钮。我还覆盖TextBox以创建一个控件,当按下键盘按钮时,该控件将当前整数增加或减少1。我的构造函数正在注册DecrementClickedEvent,如下所示:

EventManager.RegisterClassHandler(
            typeof(UIElement), SoftKeyPad.DecrementClickedEvent,
            (RoutedEventHandler)OnDecrement);

这是我的经纪人:

private void OnDecrement(object sender, RoutedEventArgs e)
      {
         try
         {
            if (this.IsFocused)
            {
               var currentNumber = Convert.ToInt32(Text) - 1;
               Text = currentNumber.ToString();
            }
         }
         catch (Exception)
         {
            //If we can't convert, we can't decrement.
            if (Text.IsNullOrEmpty())
            {
               Text = "0";
            }
         }
      }

然而,这会导致我发现的内存泄漏,因为处理程序需要是静态的。如果我让处理程序保持静态,我无法获取文本以便更改它。我是以错误的方式来做这件事的吗?如果我将OnDecrement设为静态,我该如何编辑文本?

0 个答案:

没有答案