/// <summary>
/// Constructor. Not intended for external use (use CpService.Invocation instead)
/// </summary>
/// <param name="aService">Service the action is being invoked on</param>
/// <param name="aAction">Handle to the action being invoked</param>
/// <param name="aCallback">Callback to run when the action completes</param>
internal Invocation(CpService aService, IntPtr aAction, CpProxy.CallbackAsyncComplete aCallback)
{
iService = aService;
iInputArgs = new List <Argument>();
iOutputArgs = new List <Argument>();
GCHandle gch = GCHandle.Alloc(this); /* no need to store gch as a member as AsyncComplete is guaranteed
* to be called, even in error cases */
iAsyncComplete = aCallback;
iCallbackAsyncComplete = new CpProxy.CallbackActionComplete(AsyncComplete);
IntPtr ptr = GCHandle.ToIntPtr(gch);
iHandle = CpServiceInvocation(aService.Handle(), aAction, iCallbackAsyncComplete, ptr);
}