public async Task EvaluateAsync(string rScript) { VariableSubscription subscription = null; // One eval at a time await _sem.WaitAsync(); try { _mre.Reset(); _globalEnv = null; subscription = _variableProvider.Subscribe(0, "base::environment()", OnGlobalEnvironmentEvaluated); using (var evaluation = await base.Session.BeginEvaluationAsync()) { await evaluation.EvaluateAsync(rScript); } if (System.Diagnostics.Debugger.IsAttached) { _mre.Wait(); } else { if (!_mre.Wait(TimeSpan.FromSeconds(10))) { throw new TimeoutException("Evaluate time out"); } } } finally { _variableProvider.Unsubscribe(subscription); _sem.Release(); } }
public async Task VariableGrid_ConstructorTest02() { VisualTreeObject actual = null; using (var hostScript = new VariableRHostScript()) { using (var script = new ControlTestScript(typeof(VariableGridHost))) { DoIdle(100); var result = await hostScript.EvaluateAsync("grid.test <- matrix(1:10, 2, 5)"); EvaluationWrapper wrapper = new EvaluationWrapper(result); DoIdle(2000); wrapper.Should().NotBeNull(); UIThreadHelper.Instance.Invoke(() => { var host = (VariableGridHost)script.Control; host.SetEvaluation(wrapper); }); DoIdle(1000); actual = VisualTreeObject.Create(script.Control); ViewTreeDump.CompareVisualTrees(_files, actual, "VariableGrid02"); } } }
public async Task <DebugEvaluationResult> EvaluateAsync(string rScript) { // One eval at a time await _sem.WaitAsync(); try { var debugSession = await _debugSessionProvider.GetDebugSessionAsync(Session); var frames = await debugSession.GetStackFramesAsync(); var frame = frames.FirstOrDefault(f => f.Index == 0); const DebugEvaluationResultFields fields = DebugEvaluationResultFields.Classes | DebugEvaluationResultFields.Expression | DebugEvaluationResultFields.TypeName | (DebugEvaluationResultFields.Repr | DebugEvaluationResultFields.ReprStr) | DebugEvaluationResultFields.Dim | DebugEvaluationResultFields.Length; var result = await frame.EvaluateAsync(rScript, fields); var globalResult = await frame.EvaluateAsync("base::environment()", fields); _globalEnv = new EvaluationWrapper(globalResult); return(result); } finally { _sem.Release(); } }
private void OnGlobalEnvironmentEvaluated(DebugEvaluationResult result) { _globalEnv = new EvaluationWrapper(result); _mre.Set(); }