public async Task <bool> RegisterCortanaCommands(Dictionary <string, Action> commands) { try { cortanaCommands = commands; SpeechRecognizer = new SpeechRecognizer(); var constraint = new SpeechRecognitionListConstraint(cortanaCommands.Keys); SpeechRecognizer.Constraints.Clear(); SpeechRecognizer.Constraints.Add(constraint); var result = await SpeechRecognizer.CompileConstraintsAsync(); if (result.Status == SpeechRecognitionResultStatus.Success) { SpeechRecognizer.ContinuousRecognitionSession.StartAsync(); SpeechRecognizer.ContinuousRecognitionSession.ResultGenerated += (s, e) => { if (e.Result.RawConfidence >= 0.5f) { Action handler; if (cortanaCommands.TryGetValue(e.Result.Text, out handler)) { Application.InvokeOnMain(handler); } } }; return(true); } return(false); } catch (Exception exc) { LogSharp.Warn("RegisterCortanaCommands: " + exc); return(false); } }
public void Clean() { IntPtr[] handles; lock (knownObjects) handles = knownObjects.OrderBy(t => GetDisposePriority(t.Value)).Select(t => t.Key).ToArray(); foreach (var handle in handles) { ReferenceHolder<RefCounted> refHolder; lock (knownObjects) knownObjects.TryGetValue(handle, out refHolder); refHolder?.Reference?.Dispose(); } LogSharp.Warn($"RefCountedCache objects alive: {knownObjects.Count}"); //knownObjects.Clear(); }