C
Join ServerC#
help
❔ Data doesnt get set with DispatcherQueue.TryEnqueue()
HHalfbax2/14/2023
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
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?
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()
{
_cts.TryReset();
if (CurrentSource is null)
return;
DispatcherQueue? queue = DispatcherQueue.GetForCurrentThread();
try
{
_capture = VideoCapture.FromCamera(CurrentSource.Id);
byte[] data;
while (!_cts.IsCancellationRequested)
{
using Mat? image = _capture.RetrieveMat();
if (image.Height <= 0)
continue;
data = image.ToBytes();
queue?.TryEnqueue(() => SetData(data)); // data != null, checked
await Task.Yield();
}
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
// 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?
AAccord2/15/2023
Looks like nothing has happened here. I will mark this as stale and this post will be archived until there is new activity.