internal static async Task StartCaptureAsync([NotNull] StartCapture srv) { if (Settings.ScreenCaptureManager == null) { srv.Response.Success = false; srv.Response.Message = "No screenshot manager has been set for this platform"; return; } string errorMessage = null; using (SemaphoreSlim signal = new SemaphoreSlim(0)) { GameThread.Post(async() => { try { await Settings.ScreenCaptureManager.StartAsync( srv.Request.ResolutionX, srv.Request.ResolutionY, srv.Request.WithHolograms); } catch (Exception e) { errorMessage = e.Message; } finally { signal.Release(); } }); if (!await signal.WaitAsync(DefaultTimeoutInMs)) { Logger.Error("ControllerService: Unexpected timeout in StartCaptureAsync"); srv.Response.Success = false; srv.Response.Message = "Request timed out"; return; } } if (errorMessage != null) { srv.Response.Success = false; srv.Response.Message = errorMessage; return; } srv.Response.Success = true; }
private void m_AudioCapDevices_SelectedValueChanged(object sender, EventArgs e) { if (!String.IsNullOrEmpty(m_AudioDir.Text) && !String.IsNullOrEmpty(m_AudioCapDevices.Text)) { double ThreshVal = ((double)m_ThreshAdj.Value) / (m_ThreshAdj.Maximum - m_ThreshAdj.Minimum); ThreshVal = Math.Pow(Int16.MaxValue, ThreshVal); StartCapture sc = new StartCapture(DoAsyncStartCapture); sc.EndInvoke(sc.BeginInvoke(m_AudioCapDevices.Text, m_AudioDir.Text, (int)m_BuffTime.Value, (int)m_SkipTime.Value, (int)ThreshVal, null, null)); m_UVMetersTimer.Enabled = true; m_UVMetersTimer.Start(); } }