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);
			}
		}