public ThreadPool() { _taskProc = MyTaskProc; GC.KeepAlive(_taskProc); _pool = Sdk.ThreadPool.Create_HP_ThreadPool(); if (_pool == IntPtr.Zero) { throw new InitializationException("创建线程池对象失败"); } }
private void ThreadProc() { try { TaskProc?.Invoke(); Success = true; } catch (Exception e) { Error = e.Message; Success = false; } }
public static extern bool HP_ThreadPool_Submit(IntPtr pThreadPool, TaskProc fnTaskProc, IntPtr pvArg, int dwMaxWait /*= INFINITE*/);
/// <summary> /// 向线程池提交异步任务 /// </summary> /// <param name="fnTaskProc">任务处理函数</param> /// <param name="args">任务参数</param> /// <param name="maxWait">最大等待时间(毫秒,默认:INFINITE即-1,一直等待)</param> /// <returns>TRUE -- 成功,FALSE -- 失败,可通过 SYS_GetLastError() 获取系统错误代码,其中,错误码 #ERROR_DESTINATION_ELEMENT_FULL 表示任务队列已满</returns> public bool Submit(TaskProc fnTaskProc, IntPtr args, int maxWait = -1) { return(ThreadPoolSdk.HP_ThreadPool_Submit(pThreadPool, fnTaskProc, args, maxWait)); }