public Event EnqueueNDRangeKernel(Kernel kernel, int[] globalWorkOffset, int[] globalWorkSize, int[] localWorkSize, Event[] eventWaitList) { var workDim = globalWorkSize.Length; if (globalWorkOffset != null && globalWorkOffset.Length != workDim) { throw new ArgumentException(String.Format("Invalid length of globalWorkOffset array: expected {0}, found {1}.", workDim, globalWorkOffset.Length)); } if (localWorkSize != null && localWorkSize.Length != workDim) { throw new ArgumentException(String.Format("Invalid length of localWorkSize array: expected {0}, found {1}.", workDim, localWorkSize.Length)); } var numEvents = 0; IntPtr[] events = null; if (eventWaitList != null) { numEvents = eventWaitList.Length; events = Event.ToIntPtr(eventWaitList); } IntPtr result; var error = NativeMethods.clEnqueueNDRangeKernel(this.handle, kernel.handle, workDim, globalWorkOffset, globalWorkSize, localWorkSize, numEvents, events, out result); if (error != ErrorCode.Success) { throw new OpenClException(error); } return(new Event(result)); }