1

私は、このコードが実際に何を達成することになっているのかを理解しようとして、すべてのグーグルアイとドロドロした頭脳を持ってきました。

場合によっては、bool arg が 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();
}

何かが実際に起こっているとしたら、ここで何が起こっているのかわかりません。コードが自分の尻尾を追いかけているだけか、1 つの大きな野生のガチョウの追跡/循環参照であるかのように見えます。PDALoginTerminate() を右クリックすると、その上の行に移動します。

私は何が欠けていますか (さらに、できれば一時的に、私の正気のかなりの部分)?

注: これは .NET 1.1 プロジェクトです。

アップデート

私は単純化のアイデアが好きですが、これを行うと:

pc.PDALoginTerminate += DeinitLoginDialogs;

...「メソッド 'PDAClient.frmCentral.DeinitLoginDialogs()' は括弧なしで参照されています

...そして、私がこれを行うと:

pc.PDALoginTerminate += DeinitLoginDialogs();

タイプ 'void' を 'PendingCommands.PDALoginTerminateEventHandler' に暗黙的に変換することはできません

4

1 に答える 1

2

これはハンドラです:

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;

わーい。残念ながら、長い名前は読みやすさに役立ちません。彼らは私の頭も痛めました。

于 2013-03-04T23:54:49.073 に答える