private async void RunBitmapUpdaterAsync() { do { await _bitmapUpdateRequired.WaitAsync(); if (_isLoaded) { if (_hueRingImage == null) { continue; } if (_containerGrid.ActualHeight <= 2 * (RingThickness + ThumbBorderThickness) || _containerGrid.ActualWidth <= 2 * (RingThickness + ThumbBorderThickness)) { continue; } var hueRingSize = (int)Math.Min( _containerGrid.ActualWidth - 2 * ThumbBorderThickness, _containerGrid.ActualHeight - 2 * ThumbBorderThickness); var wb = new WriteableBitmap(hueRingSize, hueRingSize); await wb.RenderColorPickerHueRingAsync(hueRingSize / 2 - (int)RingThickness); _hueRingImage.Source = wb; } } while (_isLoaded); }