public DesktopNativeWorkItem(DacpWorkRequestData result) { _callback = result.Function; _data = result.Context; switch (result.FunctionType) { default: case WorkRequestFunctionTypes.UNKNOWNWORKITEM: _kind = WorkItemKind.Unknown; break; case WorkRequestFunctionTypes.TIMERDELETEWORKITEM: _kind = WorkItemKind.TimerDelete; break; case WorkRequestFunctionTypes.QUEUEUSERWORKITEM: _kind = WorkItemKind.QueueUserWorkItem; break; case WorkRequestFunctionTypes.ASYNCTIMERCALLBACKCOMPLETION: _kind = WorkItemKind.AsyncTimer; break; case WorkRequestFunctionTypes.ASYNCCALLBACKCOMPLETION: _kind = WorkItemKind.AsyncCallback; break; } }
internal override IEnumerable <NativeWorkItem> EnumerateWorkItems() { IThreadPoolData data = GetThreadPoolData(); if (_version == DesktopVersion.v2) { ulong curr = data.FirstWorkRequest; byte[] bytes = GetByteArrayForStruct <DacpWorkRequestData>(); while (Request(DacRequests.WORKREQUEST_DATA, curr, bytes)) { GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned); DacpWorkRequestData result = (DacpWorkRequestData)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(DacpWorkRequestData)); handle.Free(); yield return(new DesktopNativeWorkItem(result)); curr = result.NextWorkRequest; if (curr == 0) { break; } } } }
public DesktopNativeWorkItem(DacpWorkRequestData result) { Callback = result.Function; Data = result.Context; Kind = result.FunctionType switch { WorkRequestFunctionTypes.TIMERDELETEWORKITEM => WorkItemKind.TimerDelete, WorkRequestFunctionTypes.QUEUEUSERWORKITEM => WorkItemKind.QueueUserWorkItem, WorkRequestFunctionTypes.ASYNCTIMERCALLBACKCOMPLETION => WorkItemKind.AsyncTimer, WorkRequestFunctionTypes.ASYNCCALLBACKCOMPLETION => WorkItemKind.AsyncCallback, _ => WorkItemKind.Unknown, }; }
public DesktopNativeWorkItem(DacpWorkRequestData result) { m_callback = result.Function; m_data = result.Context; switch (result.FunctionType) { default: case WorkRequestFunctionTypes.UNKNOWNWORKITEM: m_kind = WorkItemKind.Unknown; break; case WorkRequestFunctionTypes.TIMERDELETEWORKITEM: m_kind = WorkItemKind.TimerDelete; break; case WorkRequestFunctionTypes.QUEUEUSERWORKITEM: m_kind = WorkItemKind.QueueUserWorkItem; break; case WorkRequestFunctionTypes.ASYNCTIMERCALLBACKCOMPLETION: m_kind = WorkItemKind.AsyncTimer; break; case WorkRequestFunctionTypes.ASYNCCALLBACKCOMPLETION: m_kind = WorkItemKind.AsyncCallback; break; } }