protected virtual void Dispose(bool disposing) { this.disposing = true; while ((__renderingThread.ThreadState & ThreadState.Stopped) != ThreadState.Stopped) { if ((__renderingThread.ThreadState & ThreadState.Unstarted) == ThreadState.Unstarted) { break; } __mres.Set(); Thread.Sleep(5); } if (!disposedValue) { if (disposing) { while (__cmdList.Count > 0) { __cmdList.TryDequeue(out Action a); } Configuration.Dispose(); __messagePipe.Dispose(); __layers.ForEach(l => l.Dispose()); __layers.Clear(); __mres.Dispose(); } __messagePipe = null; disposedValue = true; } }
/// <summary> /// Layer 构造函数,对外隐藏 /// 使用Render 中的GetNewLayer方法 /// </summary> internal Layer(ConcurrentQueue <Action> cmdList, RenderConfig config) { UUID = Guid.NewGuid().ToString(); __cmdList = cmdList; __config = config; primitives = new List <IPrimitive>(); __messagePipe = new MessagePipe(this); }
/// <summary> /// 构造函数 /// </summary> /// <param name="handle">绘制窗体句柄</param> protected AbstractRenderer() { __layers = new List <Layer>(); __mres = new ManualResetEventSlim(false); __cmdList = new ConcurrentQueue <Action>(); __messagePipe = new MessagePipe(this); __renderingThread = new Thread(new ThreadStart(RenderingLoop)) { IsBackground = true }; Configuration = new RenderConfig(); Configuration.ClientSizeChanged += Configuration_ClientSizeChanged; }
protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { primitives.ForEach(s => s.Dispose()); primitives.Clear(); __messagePipe.Dispose(); } __messagePipe = null; __cmdList = null; __config = null; disposedValue = true; } }