问题标签 [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 回答
418 浏览

.net - 您如何处理高性能场景中的“事件”?

更新:我编写了一个程序来测试我在下面提到的每种技术的内存影响。毫不奇怪,我发现,果然,使用 .NET 事件的传统方法比其他方法产生更多的垃圾(意思是,它确实会产生垃圾,而其他两种策略似乎都不会产生任何垃圾)。

真的,我应该一直强调,我对.NET 事件中参数的内存开销比速度方面的成本更感兴趣。最终我不得不承认,就所有实际目的而言——无论是内存还是速度——成本都可以忽略不计。尽管如此,我还是觉得有趣的是,以“传统”方式引发大量事件确实会花费一些东西——而且在极端情况下,它甚至会导致第一代垃圾收集,这可能会或可能无关紧要,具体取决于情况(根据我的经验,系统需要越“实时”,就越需要注意垃圾的产生位置以及如何在适当的情况下将其最小化)。TEventArgs


这似乎是一个愚蠢的问题。例如,我意识到 Windows 窗体可以很容易地被认为是“高性能”场景,数百甚至数千个事件一直在非常快速地连续引发(例如,Control.MouseMove事件)。但我仍然想知道,当预期该类将用于高性能、时间关键的代码时,使用 .NET 事件设计一个类是否真的合理。

我主要关心的是一个约定,即EventHandler<TEventArgs>对所有事件都使用类似的东西,其中TEventArgs派生自EventArgs并且很可能是每次引发/处理事件时都必须实例化的类。(如果它只是 plain EventsArgs,显然,这不是EventArgs.Empty可以使用的情况;但假设类型中包含任何有意义和非常量的信息TEventArgs,则可能需要实例化。)看起来这会导致 GC 压力大于我希望创建一个高性能库。

也就是说,我能想到的唯一选择是:

  1. 对事件使用非常规的委托类型(即 not EventHandler<TEventArgs>),仅采用不需要对象实例化的参数,例如int,double等(甚至string, 并传递对现有字符串对象的引用)。
  2. 完全跳过事件并使用虚拟方法,强制客户端代码根据需要覆盖它们。这似乎与之前的想法具有基本相同的效果,但方式更加可控。

我对 .NET 事件的 GC 压力的担忧一开始就没有根据吗?如果是这样,我在那里错过了什么?或者,有没有比我刚刚列出的两个更好的第三种选择?

0 投票
2 回答
6251 浏览

mvvm-light - 使用 EventToCommand & PassEventArgsToCommand :: 如何获取发送者,或者更好的比喻?

我正在做的事情是在视图模型中需要发生很多事情,但是当视图被加载时,而不是在构造函数上。我可以连接事件处理程序并发送消息,但这对我来说似乎有点草率。我正在实现一个包含此逻辑的基本视图和基本视图模型,因此我的所有视图都默认获得它,希望如此。

也许我什至无法得到我想要的东西:发件人。我只是想这是 RoutedEventArgs.OriginalSource 应该是什么?

[编辑] 与此同时,我在 xaml.cs 中连接了一个 EventHandler,果然,OriginalSource 在那里也是空的。所以我想我真的需要知道是否有可能在命令中获得对视图/发送者的引用?[/编辑]

我的实现要求我的视图模型的帮助器类负责创建“窗口”,该类知道所有窗口都添加到的“主机”控件。我愿意接受在使用 eventtocommand 的范围之外完成此任务的建议。:)

(Unloaded 的代码是一样的)

0 投票
2 回答
148 浏览

asp.net - 如何找到在 asp.net 控制事件中使用的 eventargs 类

如果我在标记中向我的控件添加一个事件,例如在 EntityDataSource 中添加一个 OnUpdating,我如何找到方法参数列表?

例如,我怎么知道放入

代替

在 FormView OnDataBinding 事件中是否有比 EventArgs 更具体的类

0 投票
1 回答
129 浏览

.net - .net:在 3 层 Windows 应用程序项目中,应该在哪里声明 EventArg 类?

在 3 层 Windows 应用程序项目中,应该在哪里声明 EventArg 类?

0 投票
3 回答
330 浏览

c# - EventArgs 类和 event 关键字之间是否存在特殊关联?

在我读过的所有 .NET 书籍中,实现事件的指南解释了您需要继承EventArgs和使用 EventHandler。我在http://msdn.microsoft.com/en-us/library/ms229011.aspx上查找了更多信息,它说“使用 System.EventHandler 而不是手动创建新的委托以用作事件处理程序。” 我知道使用 EventArgs 有重要的原因,但我的问题不是“我应该这样做吗?”,而是“我可以这样做吗?”。

有什么理由我不能使用通用委托而不是EventHandler我的事件?例如,如果我想要一个强类型的发件人(其他人会因此而烦恼object sender吗?)。

为了更好地解释我的意思,是否有任何理由以下不起作用?

0 投票
4 回答
767 浏览

c# - 如何从自定义事件处理程序返回项目

我正在处理的项目要求我能够在每次将项目添加到列表时触发事件。为此,我创建了一个继承自 List 的自定义 List 类并添加了一个 OnAdd 事件。我还想返回作为 EventArgs 添加的项目,为此我添加了更多代码(如下所示):

这就是我添加处理程序的方式

但是,在 OnAdd 方法中:

我只能访问 e.Equals、e.GetHashCode、e.GetType 和 e.ToString,而不能访问 Client 类的任何成员。

0 投票
1 回答
559 浏览

c# - 事件参数中 IEnumerable 的最佳实践

我有一个 DLL,包括一个用于管理音频和 midi 端口和连接的类。每当注册或注销端口或形成或释放连接时,此类都会触发事件,例如ConnectionChanged使用自定义事件参数,包括属性Enum ChangeTypeIEnumerable<Connection> ChangedConnections

现在我的问题是:我真的应该只发送更改的连接还是将事件参数的属性更改为Connections并发送一个包含所有活动连接的 IEnumerable?

0 投票
3 回答
7203 浏览

c# - 如何在按钮单击事件中访问自定义 EventArgs 类?

作为后续: 访问自定义 eventargs 类中的值

如何使用按钮单击或任何其他方法访问自定义 Eventargs 类中的公共变量?

示例自定义事件参数类:

button_click 事件背后的代码:

感谢帮助。

0 投票
1 回答
467 浏览

c# - 事件参数最佳实践和更新问题

我可以只更新自定义 EventArgs 类中的选定变量,还是需要同时更新所有变量?例如,当调用此方法时:

<已修改;有人指出,上述使用方法调用更新 EventArgs 的语法不正确.. 即......“新”关键字是一个新的 EventArg 不更新......这引出了一个问题..你如何通过方法更新 EventArgs全部或部分调用(只有一些变量而不是全部)...>

我可以省略我不想更新的变量..' TraderEventArgs(,,var3) 吗?

还是会让 TraderEventArgs.var1 和 TraderEventArgs.var2 为空?

这是一个关于我是否需要创建多个 EventArgs 类或者我是否可以将所有(有时是不相关的)非相关数据一起存储在一个自定义 EventArgs 类中的问题。

更正:我在问是否可以将有时不相关的数据一起存储在一个事件参数类中,该类可能会或可能不会与其他非相关数据同时更新......我之前可能不清楚...

0 投票
3 回答
1574 浏览

c# - 如何通过“发件人”对象检查“方法组”?

想象一下这样的方法(在 Win Forms 中):

我希望我很清楚,那就是我想知道哪个方法正在调用“GetData”。注意我知道我可以有一个全局变量并将其设置为某个值,但我想知道是否有直接的方法来做到这一点?

谢谢。