为什么这个Action事件为空?
本文关键字:事件 Action 为什么 | 更新日期: 2023-09-27 18:02:15
我目前有2个WinForms。
FormA创建一个FormB的实例。我调用FormB的ShowDialog()方法。
FormB定义public event Action<SomeClass, string> Analyze
当我点击FormB的ProcessEvent按钮时,我做了以下操作:
Action<SomeClass, string> tempAction = Analyze;
if (tempAction != null)
{
tempAction.Invoke(instanceOfSomeClass, someString);
}
但是事件没有被调用,因为tempAction为空。
为什么它是空的?
我在FormA中以相同的方式定义事件,它们工作得很好。
编辑:我有一个订阅事件的presenter类:
formBInstance.Analyze += StartAnalyze
您必须为事件签名。如果没有订阅者,Analyze将为null
FormB form = new FormB();
form.Analyze += OnAnanlyze; // define callback function
其他人已经回答了你最初的问题。我只是想补充一些你应该考虑的问题。
<<p> 事件初始化/strong>首先,您可以使用' delegate{} '作为所有事件的初始化项,以便能够跳过null检查,并使您的事件线程安全。
的例子:
public class MyClass
{
public event EventHandler<TempActionArgs> TempAction = delegate {};
}
这样你就可以通过
调用它TempAction(this, new TempActionArgs(someStrings);
不需要任何检查
使用标准事件机制
事件不要使用Action<>
。一定要使用标准的EventHandler
/EventArgs
机制,使您的应用程序看起来像任何其他。net应用程序。我认为Action<>
应该只用于临时调用(而不是在对象生命周期中)。LINQ方法就是一个很好的例子。