问题标签 [eventargs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
828 浏览

c# - 有人可以用最通俗的方式向我解释如何使用 EventArgs 吗?

我知道他们与代表有关。我已经尝试过,但我仍然不明白如何使用它们。我对事件处理程序了解一些,但我真正想知道的是如何使用属于大多数方法的普通旧事件参数。下面的例子

感谢您的时间和考虑,我只是想成为最好的编码员。

麦克风

0 投票
3 回答
330 浏览

c# - 通过 eventargs 传回数据的问题或最佳实践?

我有一个非 GUI 类,它生成关于它正在做什么的事件(这些事件又被表单用来向用户显示进度)。

其中一个事件是AboutToDoSomethingDestructiveEvent. 现在我们想让表单在AboutToDoSomethingDestructiveEvent引发时向用户显示一个对话框,询问他们是否愿意SomethingDestructive。如果他们选择 no,那么我们将为客户设置一个值,EventArgs原始表单将读取该值,然后跳过 do SomethingDestructive

这是对事件和的正确使用EventArgs吗?这种方法有问题吗?有没有做这种事情的最佳实践?

0 投票
1 回答
703 浏览

c# - 如何处理多个事件参数

我正在创建一个小游戏。引擎将有许多 GUI 可以订阅的事件。这些事件是:

  • 球已选中
  • 球取消选中
  • 球动
  • 球被移除

如果我只有一种类型的球,这一切都很好,但是有 X 种类型的球。它们都派生自一个抽象的 Ball 类。

每种球类型都有自己的动作,当该事件发生时会发生这些动作。他们都需要将不同的信息传递回 GUI。例如,我有这两种球类型(这里有更多只是减少信息量)。

  • 弹跳球
  • 球爆炸

BallBouncing 将需要告诉 GUI 它可能已经移动到了哪里,因此只需传回有关它自己的信息。

另一方面,BallExploding 会摧毁周围的球。所以它需要说出它是哪个球以及它摧毁的所有球。

这两种球类型都可以从同一个事件中触发,但具有不同的事件参数。我可以包含一个值字典,但这并不像每种类型都有一个自定义事件参数那样明确。

我还认为,如果我创建一个自定义事件 args,其中包含所涉及的球,然后为每种球类型从该事件继承,我可以将事件 args 回退。

因此,在 GUI 事件处理程序中,它会通过知道所使用的球类型来投射事件 args。我也不太喜欢这个解决方案,因为它感觉很脏而且绑得太紧。

所以我想我在问有没有人有建议,想法如何解决这种情况。

谢谢

乔恩

编辑

好的,所以我想我会尝试更多地解释我的结构以澄清并了解它会将我们带到哪里:

我有一个Objects DLL,它具有Board 和ball 的接口,它有两个Enum,一个用于board 类型,一个用于Ball 类型(这主要用于工厂知道要创建哪种类型的对象)。DLL 还具有 Ball 类和 Board 类的各种实现。

抽象 Ball 类包含诸如颜色、其 X 和 Y 坐标、已选择和 BallType Enum 等信息。它有几个方法,Clone()(来自 ICloneable)和 CompareTo(带有 Equals 和哈希值位)。

我有一个实例管理器 DLL,它有一个控制对球板和游戏配置数据的访问的单例对象。该 DLL 还包含 BallFactory 和 boardFactory(不确定这些是否应该包含在 Objects DLL 中,因为它们不是可以说的对象,不确定这是否是一个很好的做法)。

然后我有引擎 DLL。这涉及游戏的所有逻辑。如何创建板和球,为什么创建它们以及如何使用它们。Ball 和 Board 类有一个 LogicFactory(所有这些工厂都使用 BallTypes 和 BoardTypes Enum 来决定使用哪个实现)。

逻辑类决定棋盘如何移动球并调用球的动作方法:

  • 球已选中
  • 球取消选中
  • 球动
  • 球被移除

这是在 Ball Logic 类中。

我没有将所有逻辑都放在它们本身的对象中的原因是我认为逻辑和功能应该与仅存储有关它的数据的对象分开(这可能是完全错误的)。BallLogic 贝司类中包含关于球如何移动/动作的大部分功能,每个派生类决定它调用的内容(所有方法都是虚拟的,因此如果需要也可以更改)。

感谢您的所有投入,它真的很受欢迎。我这样做是为了好玩,但主要是为了学习开发不同类型应用程序的正确(和错误)方法。

0 投票
7 回答
65195 浏览

c# - 如何使事件处理程序异步运行?

我正在编写一个在辅助线程上执行连续循环操作的 Visual C# 程序。有时,当该线程完成任务时,我希望它触发事件处理程序。我的程序会这样做,但是当事件处理程序被触发时,辅助线程会等到事件处理程序完成后再继续线程。我如何让它继续?这是我目前的结构方式......

此代码是我的一台设备的 API 的一部分。当 OperationFinished 事件被触发时,我希望客户端应用程序能够做它需要做的任何事情(即相应地更新 GUI),而无需拖拽 API 操作。

另外,如果我不想将任何参数传递给事件处理程序,我的语法是否正确OperationFinished(null, new EventArgs())

0 投票
3 回答
3374 浏览

c# - .NET:每次事件触发时创建新的 EventArgs 是一种好习惯吗?

例如,我有一个基本事件发布方法:

OnSomeEvent对于在触发时覆盖并引发附加事件的派生类:

如果派生像这样继续下去,它将为需要它的每一代派生类创建一个新的派生 EventArgs。但是,似乎EventArgs.NET 框架上的各种派生并非设计为可变的(没有设置器),这不鼓励对象保留 EventArgs 的单个实例并随时修改它。

所以每次这样的事件触发时,它都会为所有涉及的EventArgs对象重新分配内存。在一个事件可以每秒触发数十次的图形密集型应用程序中(例如OnPaint控件上的事件),这真的是一个好习惯吗?

我是否应该进行一些更改OnExtendedEvent()并使其ExtendedEventArgs可变,以便可以进行以下操作?

编辑:修复了示例代码,现在应该更清楚了。

0 投票
5 回答
1479 浏览

c# - 如何实例化没有可访问构造函数的自定义 EventArgs 类?

我有个问题; 我正在使用一个外部库,其中一个特定事件有自己的自定义事件参数;没有构造函数。如果我想使用这些 eventargs 抛出我自己的事件,我该怎么做?

如果被问到,我会提供更多细节,但我不确定我应该提供什么。:)

0 投票
1 回答
1410 浏览

c# - 事件参数分配

我有这个事件处理程序

Temp.MouseLeftButtonDown += new MouseButtonEventHandler(Temp_MouseLeftButtonDown);

但我想发送一些参数以访问 Temp_MouseLeftButtonDown 函数。我该如何分配它?

0 投票
7 回答
39137 浏览

c# - .NET 是否有内置的 EventArgs?

我正准备为带有单个参数的事件参数创建一个通用的 EventArgs 类:

在我这样做之前,C# 是否具有该语言内置的相同功能?我似乎记得在 C# 2.0 出现时遇到过类似的事情,但现在我找不到了。

或者换句话说,我必须创建自己的通用 EventArgs 类,还是 C# 提供一个?谢谢你的帮助。

0 投票
1 回答
1054 浏览

wpf - 为什么 CompositionTarget.Rendering 采用 EventArgs 而不是 RenderingEventArgs?

CompositionTarget.Rendering事件是一个普通的旧 EventHandler,带有一个普通的旧 EventArgs。然而,在现实生活中,它显然总是得到一个RenderingEventArgs实例。因此,您的事件处理程序必须从转换 EventArgs 开始,以便从中获取有用的信息。

为什么不是 type 的事件EventHandler<RenderingEventArgs>,所以我们可以更容易地获得论点(更重要的是,我们甚至可以知道论点在那里)为什么微软会选择给这个事件一个错误的签名?

我想知道向后兼容性——是否存在 RenderingEventArgs 尚不存在的版本?——但似乎并非如此。根据 MSDN,RenderingEventArgs 和 CompositionTarget 是在两个平台上的同一版本中引入的——在 WPF 中,两者都是在 .NET 3.0 中添加的;在 Silverlight 中,两者都是在 Silverlight 3.0 中添加的。

如果它给出任何提示,我遇到了一个旧的讨论线程,其中有人说:“代理正在使用 EventArgs,因为这样做可以在编组方面获得某种性能胜利。” 如果有人可以解释这可能是什么样的表现胜利,我愿意接受这个答案。

0 投票
0 回答
1472 浏览

c# - C# 将 EventArgs 序列化为 Xml

我正在尝试序列化一个包含 EventArgs 对象的对象。如果我在序列化时忽略 EventArgs 对象,一切正常,但如果我不在[XmlIgnore]它上面放置一个,应用程序会崩溃并显示错误消息

这是我正在序列化的课程,以及我序列化它的方式:

我应该如何让 EventArgs 对象正确序列化?