❔ Data doesnt get set with DispatcherQueue.TryEnqueue()

I try to get my camera feed with opencv on a non UI thread in WinUI 3. It's weird the data gets pushed into the queue, but the function doesn't get fired.

I start CaptureAsync with Task.Run() because when I start it with CaptureAsync().ConfigureAwait(false); the UI gets blocked even with Task.Yield.

private async Task CaptureAsync()

    if (CurrentSource is null)

    DispatcherQueue? queue = DispatcherQueue.GetForCurrentThread();
        _capture = VideoCapture.FromCamera(CurrentSource.Id);

        byte[] data;
        while (!_cts.IsCancellationRequested)
            using Mat? image = _capture.RetrieveMat();

            if (image.Height <= 0)

            data = image.ToBytes();
            queue?.TryEnqueue(() => SetData(data)); // data != null, checked

            await Task.Yield();
    catch (Exception e)

// doesnt get fired once
private void SetData(byte[] data)
    => CurrentFrame = data;

I do have two options. Fix the Task.Yield() problem or let it run on a secondary thread and fix the queue data. What would you do?
Looks like nothing has happened here. I will mark this as stale and this post will be archived until there is new activity.