Winforms イベントのメソッド シグネチャが何百もあるレガシー プロジェクトがあります。UIクロススレッドの問題が発生するため、BeginInvoke/EndInvokeを実行したくない現在のものは明らかです。
ただし、実行できる必要があるいくつかの非同期コマンドを処理するために、これらの署名を非同期としてマークできるようにする必要があります (デッドロックのため)。デッドロック以外の結果をもたらす方法は他にありません。
私はBeginInvokeでイベントを正常に呼び出すことができ、それは完全に機能し、適切に非同期になります。
そのため、event.GetInvokationList() を使用して調査し、ループしてそれぞれを個別に呼び出していました。メソッドが非同期の場合は、呼び出しを開始/終了します。それ以外の場合は、UI スレッドで直接呼び出します。
私の唯一の問題は、リフレクションを通じてメソッドのシグネチャが非同期かどうかを判断する方法が見つからないことです。
メソッドが MethodInfo または GetInvokationList() 値から非同期かどうかを判断する方法を知っている人はいますか?
ありがとう!