其中是实际的事件处理代码

本文关键字:事件处理 代码 | 更新日期: 2023-09-27 18:02:28

我绞尽脑汁想弄清楚这段代码到底要完成什么。

在某些情况下,下面的语句调用时带bool参数为true(如下所示),其他情况下为false:

InitializeBackgroundThread_PDALoginTerminate(true);

InitializeBackgroundThread_PDALoginTerminate()方法连接或断开事件处理程序,似乎:

private void InitializeBackgroundThread_PDALoginTerminate( bool add )
{
    try
    {
        if ( add ) 
            pc.PDALoginTerminate += new PendingCommands.PDALoginTerminateEventHandler( DeinitLoginDialogs );
        else
            pc.PDALoginTerminate -= new PendingCommands.PDALoginTerminateEventHandler( DeinitLoginDialogs );

…这是PendingCommands.PDALoginTerminateEventHandler()指向的代码:

public   delegate  void  PDALoginTerminateEventHandler();
public   event           PDALoginTerminateEventHandler PDALoginTerminate;
public   void          OnPDALoginTerminate()
{
    if (PDALoginTerminate != null)
        PDALoginTerminate();
}

我不知道这里发生了什么,如果真的发生了什么;看起来好像代码只是在追逐自己的尾巴,或者是一个巨大的徒劳的追逐/循环引用;右键单击PDALoginTerminate()会将我带到它上面的行。

我错过了什么(除了,希望是暂时的,我的理智)?

注意:这是一个。net 1.1项目。

更新

我喜欢简化的想法,但如果我这样做:

pc.PDALoginTerminate += DeinitLoginDialogs;

…我得到,"方法' pdclient . frmcentral . deinitlogindialogs()'引用没有括号"

…如果我这样做:

pc.PDALoginTerminate += DeinitLoginDialogs();

我得到,"不能隐式地将类型'void'转换为'PendingCommands '。PDALoginTerminateEventHandler"

其中是实际的事件处理代码

这是处理程序:

DeinitLoginDialogs 

您将回到引发事件的方法,但是处理程序在这里被分配(或未分配):

if ( add ) 
    pc.PDALoginTerminate += new PendingCommands.PDALoginTerminateEventHandler( DeinitLoginDialogs );
else
    pc.PDALoginTerminate -= new PendingCommands.PDALoginTerminateEventHandler( DeinitLoginDialogs );

注意PDALoginTerminateEventHandler构造函数的参数。值得注意的是,转换可以隐式执行,也就是说,像这样:

pc.PDALoginTerminate += new PendingCommands.PDALoginTerminateEventHandler( DeinitLoginDialogs );

变得……

pc.PDALoginTerminate += DeinitLoginDialogs;

耶。不幸的是,长名字对可读性没有帮助。他们也伤了我的头。