private static async void SetBackgroundInternal(GLTextureReader reader) { using (reader) { CancellationTokenSource cancelationToken = new CancellationTokenSource(); lock (BackgroundLock) { if (_cancelationToken != null) { _cancelationToken.Cancel(); _cancelationToken.Dispose(); } _cancelationToken = cancelationToken; } GLTexture texture = await reader.ReadTextureAsync(cancelationToken.Token); lock (BackgroundLock) { if (cancelationToken.IsCancellationRequested) { texture.SafeDispose(); } else { SetBackground(texture); } } } }
public static void SetBackground(GLTextureReader reader) { if (reader == null) { SetBackground((GLTexture)null); return; } ThreadPool.QueueUserWorkItem(state => SetBackgroundInternal(reader)); }