zoukankan      html  css  js  c++  java
  • 【C#】AddHandler可重复多次添加事件处理器的问题

    问题:在项目中发现,可以重复多次添加同一个Handler,导致触发时执行多次的问题。

    这个现象也很好测试:

    前台准备一个Label文本

    <Label x:Name="label" Content="测试重复多次AddHandler点击事件" Width="300" Height="200"
               HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>

    后台给它重复多次添加同一个事件处理器Handler。这里选用鼠标左键弹起事件方便测试。

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
    
            CheckAddHandler();
        }
    
        // 测试重复多次添加同一个Handler
        private void CheckAddHandler()
        {
            label.AddHandler(Label.MouseLeftButtonUpEvent, new RoutedEventHandler(Label_MouseLeftButtonUpEvent));
            label.AddHandler(Label.MouseLeftButtonUpEvent, new RoutedEventHandler(Label_MouseLeftButtonUpEvent));
            label.AddHandler(Label.MouseLeftButtonUpEvent, new RoutedEventHandler(Label_MouseLeftButtonUpEvent));
            label.AddHandler(Label.MouseLeftButtonUpEvent, new RoutedEventHandler(Label_MouseLeftButtonUpEvent));
            label.AddHandler(Label.MouseLeftButtonUpEvent, new RoutedEventHandler(Label_MouseLeftButtonUpEvent));
            label.AddHandler(Label.MouseLeftButtonUpEvent, new RoutedEventHandler(Label_MouseLeftButtonUpEvent));
        }
    
        // 鼠标左键弹起事件
        private void Label_MouseLeftButtonUpEvent(object sender, RoutedEventArgs e)
        {
            System.Console.WriteLine("添加事件");
        }
    }

    运行后,看输出可知,该Handler可以重复执行多次。
    这里写图片描述


    结论:如果要添加Handler,但又不想重复添加,可以在添加之前先调用清理该Handler,然后再添加。从而保证只添加一次。

    // 先移出
    label.RemoveHandler(Label.MouseLeftButtonUpEvent, new RoutedEventHandler(Label_MouseLeftButtonUpEvent));
    // 再添加
    label.AddHandler(Label.MouseLeftButtonUpEvent, new RoutedEventHandler(Label_MouseLeftButtonUpEvent));
  • 相关阅读:
    SAP PI 如何实现消息定义查询
    EWM与ERP交互程序
    ITS Mobile Template interpretation failed. Template does not exist
    SAP Material Flow System (MFS) 物料流系统简介
    SAP EWM Table list
    EWM RF 屏幕增强
    SAP EWM TCODE list
    SAP扩展仓库管理(SAPEWM)在线研讨会笔记
    ERP与EWM集成配置ERP端组织架构(二)
    EWM RF(Radio Frequency)简介
  • 原文地址:https://www.cnblogs.com/guxin/p/csharp-wpf-add-multi-handler.html
Copyright © 2011-2022 走看看