gpt4 book ai didi

c# - 如何创建一个在触发特定事件时不运行的函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:44:12 24 4
gpt4 key购买 nike

编辑:为澄清起见,这是在 Unity 中,并且与 Update() 相关联。因此,对于任意数量的帧,事件将每帧触发一次。这两个事件都可以由用户独立触发,但是两者可以触发重叠。在这种情况下,我只希望两个事件将调用的两个方法之一实际运行。

我正在尝试将一个事件调用的方法与第二个事件调用的另一个方法联系起来,以便只能同时调用或运行这两种方法中的一种。

事件由用户的 Action 触发,两个事件可以同时触发。但我只希望在两个事件都被触发时调用的两个方法中的一个实际运行。

我在想下面这个例子,显然这个例子可能不准确,但我想要完成的事情的要点就在那里。

伪代码示例:

public delegate void OneHandler();
public event OneHandler OneEvent;
private void One()
{
if(some requirement && TEvent != null)
{
TEvent();
}
}

public delegate void TwoHandler();
public event TwoHandler TwoEvent;
private void Two()
{
if(some requirement && TEvent != null)
{
TEvent();
}
}

SomeClass.OneEvent += ActionOne();
SomeClass.TwoEvent += ActionTwo();


private void ActionOne()
{
if(TwoEvent is not firing)
{
Do Something;
}
}

private void ActionTwo()
{
if(OneEvent is not firing)
{
Do Something;
}
}

粗略的图表。棕褐色区域向下/向左移动,绿色区域沿对角线移动。我基本上想要有自己事件的棕褐色区域,如果鼠标在整个区域内,则不要运行它们的方法。

enter image description here

最佳答案

一次触发一个事件,而不是一次触发所有事件。即使同一个用户操作会导致两个事件一个接一个地触发,也无法知道这两个事件都会触发,或者它们将以什么顺序触发。


更清楚地说:我并不是说事件永远不能同时触发。我的意思是,一般来说,没有一段代码可以确定在特定情况下将触发的完整事件集。您无法提前判断哪个会触发,或者以哪个顺序,甚至在哪个线程上触发。

例如,特定的用户界面操作(或用户手势)可能会触发多个事件。通常,您不能依赖于要触发的事件数量或触发它们的顺序。

在某些情况下,例如在 ASP.NET Web 表单中,您可以确信如果用户单击具有 Click 事件处理程序的按钮,页面 Load 事件将触发,然后按钮 Click 事件将触发。但这是因为这种行为是以这种方式定义和记录的。如果顺序发生变化,或者如果页面 Load 事件停止触发,那么这将破坏大量 ASP.NET Web 窗体应用程序。

关于c# - 如何创建一个在触发特定事件时不运行的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28006528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com