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