- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想问一下EventHandler
之间的区别和 EventHandler<T>
.
之前我实现了一个 EventHandler
,带有自定义 EventArgs,可以从用户控件传递到父页面。
我想我需要申请EventHandler< T >
, 但是它可以通过使用 EventHandler
来实现. (事实上 ,当我尝试应用 EventHandler<T>
时出现了奇怪的错误,程序可以运行但错误显示在 IDE 中,我无法解决 [ C# Custom EventHandler ])
所以我想知道在什么情况下需要申请EventHandler < T >
?
public event EventHandler AppendProcess;
public event EventHandler<MyEventArg> AppendProcess;
---更新---这就是我在用户控件中调用事件的方式(正如我所说,我可以通过这样做将对象传递给父页面(尽管我不知道这样做是否正确)
if (AppendProcess == null) { }
else
AppendProcess(this, new Common.WinLose_ProgressStage(Common.WinLose_SP_Parameter.upper, displayLevel + 1,
(int)Common.WinLose_Level.lvChild4, thename, refundratio,
selfproportion, -1, -1, loadlevel, isPlayer, betsource, gamecategory, false));
最佳答案
EventHandler<T>
只是一个通用的 EventHandler
类型,这避免了您必须为每种 EventArgs
声明一个新的委托(delegate)类型你想使用。
考虑 Control.KeyPress
例如。它被声明为 KeyPressEventHandler
类型的事件.该代表刚刚声明为:
public delegate void KeyPressEventHandler(object sender, KeyPressEventArgs e)
如果EventHandler<T>
(和泛型)在创建时就已经存在,事件可以声明为 EventHandler<KeyPressEventArgs>
相反,保存委托(delegate)声明。有很多很多代表,就像EventHandler
, 并且仅在第二个参数的类型上有所不同 - EventHandler<T>
避免了这种冗余。
不,如果你没有你自己的习惯EventArgs
子类,没有理由使用 EventHandler<T>
...但是如果你这样做,最好使用它,这样处理事件的方法会收到你的自定义 EventArgs
以强类型方式子类化。
顺便说一句,您调用事件处理程序的方式不是线程安全的。另一个线程可以在您的无效性检查之后取消订阅最终事件处理程序。如果您使用的是 C# 5,则应将其编写为:
var handler = AppendProcess;
if (handler != null)
{
handler(this, new Common.WinLose_ProgressStage(...));
}
如果您使用的是 C# 6 或更高版本,则可以使用 null 条件运算符:
// If AppendProcess is null, the arguments won't even be evaluated
AppendProcess?.Invoke(this, new Common.WinLose_ProgressStage(...));
关于c# - EventHandler<T> 和 EventHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41239191/
我想问一下EventHandler之间的区别和 EventHandler . 之前我实现了一个 EventHandler ,带有自定义 EventArgs,可以从用户控件传递到父页面。 我想我需要申请
在C#中使用和使用有根本区别吗 event EventHandler和 EventHandler因为它们都产生与我所看到的相同的效果,除了使用 event 关键字会在智能感知中为您提供不同的图标。 最
我向事件添加了一个方法,但现在想在某些情况下从这些事件上删除该方法: public MyClassConstructor() { otherClassObj.OnMyDataReceived
我向事件添加了一个方法,但现在想在某些情况下从这些事件上删除该方法: public MyClassConstructor() { otherClassObj.OnMyDataReceived
最近一直在想这段代码有没有什么显着的区别: public event EventHandler SomeEvent; 还有这个: public delegate void MyEventHandler
假设你有这样的方法 private void FireEvent(EventHandler eventHandler, T eventArgs, string name) { var hand
我正在使用 GWT MVP 来开发应用程序。我看到 GWT MVP 代码中可以有两种事件处理程序,但我不太确定应该在哪个地方使用哪种事件处理程序: 1) AppController 中的 Handle
我看到一些代码使用 -= new EventHandler(anEvent) ,你能告诉我与 ' += new EventHandler' 有什么不同吗? 谢谢 最佳答案 一个将委托(delegate
我遇到了这样的 jQuery 片段: selector.eventHandler(...some code...).eventHandler(...some code...); 它有什么作用? 最佳答
我试图在指定时间内淡出一个文本框。此代码适用于 Windows Phone,但不适用于 Windows 8 应用程序。我进行了更改以修复尽可能多的错误。但我无法解决其中一个问题:cannot impl
我正在尝试在 Windows Phone 应用程序中实现一个计时器。它在 Windows Phone 应用程序 (Silverlight) 中工作正常,但它在 Windows Phone 空白应用程序
两者有什么区别? object.ProgressChanged += new EventHandler(object_ProgressChanged) object.ProgressChanged +
我已经阅读了一些关于此的主题,但我仍然不知道如何解决我的问题。我来自 Java,大部分是 C# 的新手 我想在动画结束时附加监听器: myStoryBoard.Completed += new Eve
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Can I customize automatic event handler generation in
我正在使用 axon 2.3.1 ,我有一个聚合类 public class MyAggregate extends AbstractAnnotatedAggregateRoot { @Aggre
我将 C# 与 Xamarin 结合使用,在使用 EventHandler 时出现此错误: The type or namespace name 'EventHandler' could not be
我正在阅读有关 EventHandlers 的 .NET 文档,但不理解来自 https://learn.microsoft.com/en-us/dotnet/standard/events/ 的这段
我的目的是重用从 ComboBox 类继承的 SelectedValueChanged 事件(该事件又从 ListControl 类继承) 在下面的代码中:SelectedValueChanged 标
以下代码允许在两个场景之间切换。 import javafx.application.*; import javafx.event.ActionEvent; import javafx.event.E
我有一个作业,其中我应该创建一个应用程序,将货币从卡塔尔里亚尔转换为 3 种选择之一(美元、欧元或英镑)。 我想成为一个酷男孩,并为我的应用程序提供了背景、标题和图标。但这还不够,我还决定不使用提交按
我是一名优秀的程序员,十分优秀!