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


Anmelden zum Antworten