public override void Draw(DrawArgs drawArgs) { if (_delayedEventPublisher == null && SynchronizationContext.Current != null) { _delayedEventPublisher = new DelayedEventPublisher(OnDelayedProgressChanged, 1000, DelayedEventPublisherTriggerMode.Periodic); } var asyncFrame = Frame; using (asyncFrame.AcquireLock()) { if (!asyncFrame.IsAsyncLoaded) { if (!Visible) // if this is an off-screen draw, wait for data to be loaded { lock (_waitPixelData) { if (!asyncFrame.IsAsyncLoaded) { var completionHandler = new EventHandler((s, e) => { lock (_waitPixelData) { Monitor.Pulse(_waitPixelData); } }); var onFrameAsyncLoaded = new AsyncPixelDataEventHandler(completionHandler); var onFrameAsyncFaulted = new AsyncPixelDataFaultEventHandler(completionHandler); asyncFrame.AsyncLoaded += onFrameAsyncLoaded; asyncFrame.AsyncFaulted += onFrameAsyncFaulted; asyncFrame.GetNormalizedPixelData(); // check the flag again, in case the event actually fired before we hooked up the handler if (!asyncFrame.IsAsyncLoaded) { Monitor.Wait(_waitPixelData); } asyncFrame.AsyncLoaded -= onFrameAsyncLoaded; asyncFrame.AsyncFaulted -= onFrameAsyncFaulted; } } } else if (!ApplicationGraphics.OfType <ProgressGraphic>().Any()) { ProgressGraphic.Show(this, ApplicationGraphics, true, ProgressBarGraphicStyle.Continuous, false); } } base.Draw(drawArgs); } }
public override void Draw(DrawArgs drawArgs) { if (_delayedEventPublisher == null && SynchronizationContext.Current != null) _delayedEventPublisher = new DelayedEventPublisher(OnDelayedProgressChanged, 1000, DelayedEventPublisherTriggerMode.Periodic); var asyncFrame = Frame; using (asyncFrame.AcquireLock()) { if (!asyncFrame.IsAsyncLoaded) { if (!Visible) // if this is an off-screen draw, wait for data to be loaded { lock (_waitPixelData) { if (!asyncFrame.IsAsyncLoaded) { var completionHandler = new EventHandler((s, e) => { lock (_waitPixelData) { Monitor.Pulse(_waitPixelData); } }); var onFrameAsyncLoaded = new AsyncPixelDataEventHandler(completionHandler); var onFrameAsyncFaulted = new AsyncPixelDataFaultEventHandler(completionHandler); asyncFrame.AsyncLoaded += onFrameAsyncLoaded; asyncFrame.AsyncFaulted += onFrameAsyncFaulted; asyncFrame.GetNormalizedPixelData(); // check the flag again, in case the event actually fired before we hooked up the handler if (!asyncFrame.IsAsyncLoaded) Monitor.Wait(_waitPixelData); asyncFrame.AsyncLoaded -= onFrameAsyncLoaded; asyncFrame.AsyncFaulted -= onFrameAsyncFaulted; } } } else if (!ApplicationGraphics.OfType<ProgressGraphic>().Any()) { ProgressGraphic.Show(this, ApplicationGraphics, true, ProgressBarGraphicStyle.Continuous, false); } } base.Draw(drawArgs); } }