Ich habe ein Legacy-Projekt mit hunderten von Methodensignaturen für ein Winforms-Ereignis. Offensichtlich möchte ich die aktuellen nicht gehen und BeginInvoke/EndInvoke ausführen, da dies Probleme beim Cross Threading der Benutzeroberfläche verursachen wird.So ermitteln Sie, ob die Methode zur Laufzeit asynchron ist
Allerdings muss ich (wegen Deadlocks) in der Lage sein, diese Signaturen als async zu markieren, um einige asynchrone Befehle zu bearbeiten, die wir ausführen können. Kein anderer Weg führt zu etwas anderem als einem Deadlock.
Ich kann das Ereignis erfolgreich mit BeginInvoke aufrufen und es funktioniert perfekt und asyncs richtig usw. Allerdings bricht es in einem anderen Thread und bricht die alten Implementierungen, die wir nicht durchlaufen und Async und Invoke machen müssen bewusst.
Also untersuchte ich mit der event.GetInvokationList() und durchschleifen und aufrufen jeweils getrennt. Wenn die Methode asynchron war, dann starte/beende den Aufruf. Ansonsten rufe es direkt auf dem UI-Thread auf.
Mein einziges Problem ist, dass ich keinen Weg durch Reflexion finden kann, um festzustellen, ob die Methodensignatur asynchron ist oder nicht.
Wer weiß, wie man herausfinden kann, ob eine Methode asynchron oder nicht von der MethodInfo oder etwas anderes von GetInvokationList() - Werten ist?
Danke!
Funktioniert perfekt! Vielen Dank! –