我有课
//Create GroupFieldArgs as an EventArgs
public class GroupFieldArgs : EventArgs
{
private string groupName = string.Empty;
private int aggregateValue = 0;
//Get the fieldName
public string GroupName
{
set { groupName = value; }
get { return groupName; }
}
//Get the aggregate value
public int AggregateValue
{
set { aggregateValue = value; }
get { return aggregateValue; }
}
}
我有另一个创建事件处理程序的类
public class Groupby
{
public event EventHandler eh;
}
最后我的表单上有Timer,它有Timer_TICK事件。 我想在Timer_TICK事件中传递GroupFieldArgs。 最好的方法是什么?
答案 0 :(得分:6)
只需将您的arg附加到您的“Tag”属性即可 计时器对象 - 其他任何“可能”都是过度的:
Timer SomeTimer;
void SomeMethod()
{
SomeTimer = new Timer();
SomeTimer.Tag = "myArgString"; // or struct, class, list, etc..
SomeTimer.Tick += new EventHandler(SomeTimer_Tick);
SomeTimer.Start();
}
void SomeTimer_Tick(object sender, EventArgs e)
{
string s = ((Timer)sender).Tag; // SomeTimer.Tag
}
答案 1 :(得分:1)
您可以继承标准计时器类并添加一个属性,您可以在其中注入自定义事件参数。您的新课程可以在内部处理Elapsed事件,并公开一个新事件,该事件将携带您的EventArgs。
namespace Test
{
class MyTimer : System.Timers.Timer
{
public EventArgs MyEventArgs { get; set; }
public MyTimer()
{
this.Elapsed += new System.Timers.ElapsedEventHandler(MyTimer_Elapsed);
}
void MyTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (MyEventArgs != null)
OnMyTimerElapsed(MyEventArgs);
else
OnMyTimerElapsed(e);
}
protected virtual void OnMyTimerElapsed(EventArgs ea)
{
if (MyTimerElapsed != null)
{
MyTimerElapsed(this, ea);
}
}
public event EventHandler MyTimerElapsed;
}
}
答案 2 :(得分:0)
我不确定你想要实现的目标。 Timer.Tick事件总是返回简单的EventArgs,因为它是从.Net框架内驱动的。是否要从Groupby类中定义的事件返回GroupFieldArgs?
答案 3 :(得分:0)
正如Grzenio指出的那样,它总会产生同样的事件。
也就是说,您可以创建一个将事件“弹回”给预期收件人的对象......
public class GroupFieldArgSender
{
public string GroupName { get; set; }
public int AggregateValue { get; set; }
public void RebroadcastEventWithRequiredData(object sender, EventArgs e)
{
if (GroupFieldEvent != null)
{
GroupFieldEvent(sender, new GroupFieldEvent
{ GroupName = GroupName, AggregateValue = AggregateValue });
}
}
public event EventHandler<GroupFieldEventArgs> GroupFieldEvent;
}
然后将计时器tick事件连接到RebroadcastEventWithRequiredData方法。