Wenn Sie B steuern, dann antwortet Rob Prouse oder Brodys wird funktioniert gut.
Aber was ist, wenn Sie B überhaupt nicht ändern können? In diesem Fall können Sie eine Methode immer in einen von Ihnen selbst erstellten Delegierten umbrechen, solange die Signatur der Signatur der Zielmethode entspricht.
Also sagen Sie, Sie haben eine Klasseninstanz namens B mit einer öffentlichen Methode namens b() (natürlich von der B-DLL-Assembly). Klasse A in der A-Anwendung kann es asynchron wie folgt aufrufen:
public class A
{
delegate void BDelegate();
public void BegineBMethod()
{
BDelegate b_method = new BDelegate(B.b);
b_method.BeginInvoke(BCallback, null);
}
void BCallback(IAsyncResult ar)
{
// cleanup/get return value/check exceptions here
}
}
Ich ging für die zweite Option, aber die Syntax hat mich verblüfft. –
Sie vermissen eine dritte Option. Sie können einen Delegaten in A erstellen, um die B-Methode zu spiegeln, sodass B nichts davon wissen muss. Hervorragend für den asynchronen Aufruf von Methoden in Drittanbieter-Bibliotheken, die dies normalerweise nicht unterstützen würden. –
Ich habe am Ende sowohl die erste als auch die zweite Option versucht. Die Syntax für die zweite war in meinem Fall sauberer. Vielen Dank! –