Aufruf von Begin Invoke in C# **gelöst**
-
Hi Leute,
ich habe folgeenden C++ Code und möchte wissen wie Zeile 35 in C# aussieht?
Irgenwie will der das bei mir nicht da der AsyncCallback keine 2 Argumente will in C#.
using namespace System; namespace TestNamspace { public delegate void TestAA(unsigned char Test11, unsigned char Test12,unsigned char Test13); public void Program_TestAAEvent(unsigned char Test11, unsigned char Test12,unsigned char Test13){} public ref class CTestClass { private: AsyncCallback ^OnAsyncHandler; static void AsyncHandlerCallback(IAsyncResult ^result) { ((CTestClass^)result->AsyncState)->AsyncHandler(result); } void AsyncHandler(IAsyncResult ^result) { System::Runtime::Remoting::Messaging::AsyncResult ^AsyncResult; AsyncResult = (System::Runtime::Remoting::Messaging::AsyncResult ^)result; if (TestAADelegate == AsyncResult->AsyncDelegate) { ((TestAA ^)AsyncResult->AsyncDelegate)->EndInvoke(result); } } public: TestAA ^TestAADelegate; CTestClass() { TestAADelegate += gcnew TestAA(Program_TestAAEvent); TestAADelegate->BeginInvoke(5,4,3,gcnew AsyncCallback(TestAADelegate,&TestNamspace::TestAA::EndInvoke),nullptr); } } }
MfG
-
Naja, laut MSDN Konvention, nimmt der AsyncCallback auch keine 2 Argumente
-
aber noramlerweise sind diese Anweisungen doch kompatibel von C++ nach C#.
Ich dachte immer was in managed c++ geht geht auch in C#.
Ich wäre auch mit 2 anweisungen zufrieden um das Deleagte über begininvoke aufzurufen und dem AsyncCallback Endinvoke mitzugeben das es automatisch gerufen wird.
MfG
-
Sie sind ja auch identisch, in C++ wie in C# nimmt AsyncCallback nur einen Parameter, nämlich ein IAsyncResult
-
also die C++ Anweisung da oben funktioniert und das hab ich auch nicht in der MSDN gefunden.
so gehts:
TestAADelegate.BeginInvoke(5,4,3,new AsyncCallback(TestAADelegate.EndInvoke),null);
-
aber noramlerweise sind diese Anweisungen doch kompatibel von C++ nach C#.
Ich dachte immer was in managed c++ geht geht auch in C#.
Der Source Code ist nicht kompatibel (die Syntax ist ja anders), aber der IL Code ist kompatibel.
Simon