public void StartStream(NewFrameCallback callback, Notifyier connectionErrorCb, double fps = 60) { connectionDownCb = connectionErrorCb; if (stream != null && LoopActive == false) { x = new Thread(() => Loop(callback, fps)); x.Start(); } else { SwapCallbacks(callback, connectionErrorCb); } }
private void Loop(NewFrameCallback callback, double fps) { cb = callback; try { LoopActive = true; DateTime lastFrame = DateTime.Now; int freq = (int)Math.Round(1000 / fps); while (LoopActive) { if ((DateTime.Now - lastFrame).Milliseconds >= freq) { try { isReceiving = true; ReceiveFrame(); isReceiving = false; cb(_frame); } catch (TaskCanceledException) { isReceiving = false; Disconnect(); return; } catch (IOException) { isReceiving = false; Disconnect(); return; } lastFrame = DateTime.Now; } else { Thread.Sleep(1); } } } catch (ThreadAbortException) { //ConnectionStatusChanged.Invoke(false); Disconnect(); return; } }
public void SwapCallbacks(NewFrameCallback callback, Notifyier connectionErrorCb) { cb = callback; connectionDownCb = connectionErrorCb; }