public void QueueThreadedDraw(Action <Cairo.Context> drawCallback) { if (!owner.IsRealized) { return; } runningSignal.Wait(); UpdateScale(); if (surface == null || surface.Height != TargetHeight || surface.Width != TargetWidth) { using (var similar = Gdk.CairoHelper.Create(owner.GdkWindow)) { if (surface != null) { surface.Dispose(); } surface = new SurfaceWrapper(similar, TargetWidth, TargetHeight); } } runningSignal.Reset(); this.OnDraw(drawCallback); //ThreadPool.QueueUserWorkItem (new WaitCallback (this.OnDraw), drawCallback); owner.QueueDraw(); }