如何在c#中同时触发两个事件

时间:2013-06-28 10:18:54

标签: c# winforms events button sametime

我的窗体上有三个按钮

enter image description here

并且每个按钮都有自己的方法,除了 To + T1 ,当我点击 To 时,它会设置时间 T0 为了'0'以及一些额外的设置,同样当我点击 T1 时,它获得当前时间并计算时间 T1

按钮 T0 + T1 将触发 T0 按钮点击事件,然后按 T1 按钮点击事件。


从上面的设置中,无论哪种方式,我都得到 T0 &的相同时间。 T1 (例如:T0 = 0,T1 = 0.1秒),现在我的问题是,如果我点击 T0 + T1 按钮有没有办法实现时间 T0 = 0 T1 = 0

任何建议都会非常受欢迎&谢谢你的时间.. :))

2 个答案:

答案 0 :(得分:5)

在Form.Designer.cs中,您可以添加另一个System.Eventhandler。

例如,您可以更改以下内容:

this.ToT1.Click += new System.EventHandler(this.ToT1_Click);

对此:

this.ToT1.Click += new System.EventHandler(this.To_Click);
this.ToT1.Click += new System.EventHandler(this.T1_Click);

但是,上述代码会在彼此之后触发事件,但不能同时触发事件。

答案 1 :(得分:4)

看起来您只需要为计算提供一些基本值:

void CalculateT0(DateTime calculationBase) {...}
void CalculateT1(DateTime calculationBase) {...}

void T0_ButtonClick(...)
{
    CalculateT0(DateTime.Now);
}

void T1_ButtonClick(...)
{
    CalculateT1(DateTime.Now);
}

void T0Plus1_ButtonClick(...)
{
    var calculationBase = DateTime.Now;
    CalculateT0(calculationBase);
    CalculateT1(calculationBase);
}

<强>更新

关于同时发射两个事件。

首先,你的问题与射击事件无关。你现在有这样的代码:

void T0Plus1_ButtonClick(...)
{
    T0_ButtonClick(...);
    T1_ButtonClick(...);
}

这是 Button0.ClickButton1.Click事件触发。这段代码只调用两个方法(即使它们在某处被用作事件处理程序)。您无法在该事件声明的对象外部触发事件。

第二,由于操作系统的性质,你不能在完全 相同的时间调用任何两种方法,它不是一个实时操作系统。当然,使用单个线程(如在您的示例中)这是不可能的,因为线程按顺序执行其指令,但是使用多个线程这是不可能的 - 不能保证两个线程将同时启动(并且没有这样的API)。