Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events 委托和事件,调用关联的方法_Events_C# 4.0_Delegates - Fatal编程技术网

Events 委托和事件,调用关联的方法

Events 委托和事件,调用关联的方法,events,c#-4.0,delegates,Events,C# 4.0,Delegates,我有一位代表 public delegate bool Controller_PDF_FileDone(object sender, ControllerTaskEventArgs e); 和一个事件 public event Controller_PDF_FileDone On_Controller_PDF_FileDone; 我需要使用此“事件”来调用该方法,请让我知道如何调用 提前感谢调用事件(来自声明该事件的同一类): 订阅事件(来自声明该事件的同一类): 在注册到事件的类中,

我有一位代表

public delegate bool Controller_PDF_FileDone(object sender, 
  ControllerTaskEventArgs e);
和一个事件

public event Controller_PDF_FileDone On_Controller_PDF_FileDone;
我需要使用此“事件”来调用该方法,请让我知道如何调用

提前感谢调用事件(来自声明该事件的同一类):

订阅事件(来自声明该事件的同一类):


在注册到事件的类中,您需要创建一个函数-此函数签名/参数必须与您的委托类似,这意味着创建一个返回bool并接受对象发送者、控制器taskeventargs e作为参数的函数。然后向该委托注册事件(您刚刚创建的函数)。当触发此事件时,它将调用您的委托人将事件视为指向函数的指针列表,并且所有函数都必须作为委托签名(相同的返回类型/参数)。触发事件时,将调用所有委托并接收相同的参数。除非您有充分的理由不这样做,否则您可能应该首先在变量中捕获事件,并在比较和调用中使用该变量(
var e=On_Controller\u PDF\u FileDone;if(e!=null)e.Invoke(…);
)。除非另有明确说明,否则通常可以订阅或取消订阅线程中的事件,因此
On_Controller\u PDF\u FileDone
上的
可能会在比较
null
调用
@hvd之间发生变化,您是对的。这是一个众所周知的最佳实践,在var中设置处理程序,然后检查是否为null。编辑以鼓励“最佳做法”。
var e = On_Controller_PDF_FileDone;
if (e != null) {
  e.Invoke(this, new ControllerTaskEventArgs());
}
On_Controller_PDF_FileDone += new Controller_PDF_FileDone(
  YourHandlingMethod_On_Controller_PDF_FileDone);