如何识别事件发件人 [英] How to identify event sender

查看:96
本文介绍了如何识别事件发件人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题是我创建了一个继承自Microsoft.VisualBasic.PowerPacks.OvalShape的"Node"类.我在此类中添加了一个计时器"nodeExpiredTimer".

The problem is that I have created a "Node" class inherit from Microsoft.VisualBasic.PowerPacks.OvalShape. I added a timer "nodeExpiredTimer" in this class.

class Node: OvalShape
    {
        private int _nodeID;
        private string _nodeName;
        private DateTime _nodeLastMessage;
        private Timer _nodeExpiredTimer;
        
        public Node()
        {       
            _nodeID = -1;
            _nodeName = String.Empty;
            _nodeLastMessage = new DateTime(1, 1, 1, 0, 0, 0);
            _nodeExpiredTimer = new Timer();
	    _nodeExpiredTimer.Interval = 10000;
            _nodeExpiredTimer.Enabled = false;
        }

        public int nodeID
        {
            get { return _nodeID; }
            set { _nodeID = value; }
        }
        
        public string nodeName
        {
            get { return _nodeName; }
            set { _nodeName = value; }
        }

        public DateTime nodeLastMessage
        {
            get { return _nodeLastMessage; }
            set { _nodeLastMessage = value; }
        }

        public Timer nodeExpiredTimer
        {
            get { return _nodeExpiredTimer; }
            set { _nodeExpiredTimer = value; }
        }
     }



在主线程中,我创建了一个Node数组,因此每个节点都有其计时器来确定其到期时间.我想为所有计时器创建一个通用处理程序,但是我无法确定哪个节点触发了该事件.我也尝试使用sender,但是它只能帮助我找到哪个计时器触发事件​​,而不是节点.



In the main thread, I created an array of Node so each node has its timer to determine its Expired time. I want to create a common handler for all timers but I can not identify which node fire the event. I also try using sender but it only help me find which timer fire the event, not the node. Is there any methods to find the node from the identified timer?

推荐答案

使用Tag属性:
Use the Tag property:
public Node()
{
    _nodeID = -1;
    _nodeName = String.Empty;
    _nodeLastMessage = new DateTime(1, 1, 1, 0, 0, 0);
    _nodeExpiredTimer = new Timer();
    _nodeExpiredTimer.Tag = this;         // Add this line.
    _nodeExpiredTimer.Interval = 10000;
    _nodeExpiredTimer.Enabled = false;
}


然后,您可以使用发件人 property 参数回溯到该节点:


You can then use the sender property parameter to backtrack to the node:

Timer t = sender as Timer;
if (t != null)
    {
    Node n = t.Tag as Node;
    if (n != null)
        {
        ...
        }
    }



[edit]属性"替换为参数"-OriginalGriff [/edit]



[edit]"property" replaced with "parameter" - OriginalGriff[/edit]


这篇关于如何识别事件发件人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆