public void Start(Action <T> action, T data)
        {
            if (viewThread != null)
            {
                return;
            }

            viewData   = new SurfaceViewData <T>(action, data, true);
            viewThread = new Thread(new ThreadStart(viewData.Loop));
            viewThread.Start();
        }
        public void Stop()
        {
            if (viewThread == null)
            {
                return;
            }

            viewData.SetRunning(false);
            lock (viewData.Sync)
            {
                Monitor.Pulse(viewData.Sync);
            }

            viewThread.Join();
            viewThread = null;
            viewData   = null;
        }