私は、このコードが実際に何を達成することになっているのかを理解しようとして、すべてのグーグルアイとドロドロした頭脳を持ってきました。
場合によっては、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' に暗黙的に変換することはできません」