예제 #1
0
        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;
            }
        }
예제 #2
0
파일: Layer.cs 프로젝트: RayMMond/Draw.NET
 /// <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);
 }
예제 #3
0
        /// <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;
        }
예제 #4
0
파일: Layer.cs 프로젝트: RayMMond/Draw.NET
 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;
     }
 }