internal void NotifyRuntimesChanged_DbgThread(DbgRuntime runtime) { bool raiseDebuggingChanged; DbgThread[] removedThreads; lock (lockObj) { var newDebugging = CalculateDebugging_NoLock(); raiseDebuggingChanged = !StringArrayEquals(debugging, newDebugging); if (raiseDebuggingChanged) { debugging = newDebugging; } runtime.ThreadsChanged -= DbgRuntime_ThreadsChanged; var threadsList = new List <DbgThread>(); for (int i = threads.Count - 1; i >= 0; i--) { var thread = threads[i]; if (thread.Runtime == runtime) { threadsList.Add(thread); threads.RemoveAt(i); } } removedThreads = threadsList.ToArray(); } if (removedThreads.Length != 0) { ThreadsChanged?.Invoke(this, new DbgCollectionChangedEventArgs <DbgThread>(removedThreads, added: false)); } if (raiseDebuggingChanged) { OnPropertyChanged(nameof(Debugging)); } if (!(runtime is null)) RuntimesChanged?.Invoke(this, new DbgCollectionChangedEventArgs <DbgRuntime>(runtime, added: false)); }
public void UnregisterRuntime(TargetRuntime runtime) { if (runtime == CurrentRuntime) { return; } DefaultRuntime = CurrentRuntime; runtimes.Remove(runtime); runtime.FrameworksInitialized -= HandleRuntimeInitialized; RuntimesChanged?.Invoke(this, EventArgs.Empty); }
internal void Add_DbgThread(DbgEngine engine, DbgRuntimeImpl runtime, DbgProcessState newState) { bool raiseStateChanged, raiseDebuggingChanged, raiseIsRunningChanged; DbgThread[] addedThreads; lock (lockObj) { engineInfos.Add(new EngineInfo(engine, runtime)); var newDebugging = CalculateDebugging_NoLock(); raiseStateChanged = state != newState; raiseDebuggingChanged = !StringArrayEquals(debugging, newDebugging); state = newState; if (raiseDebuggingChanged) { debugging = newDebugging; } var newIsRunning = CalculateIsRunning_NoLock(); raiseIsRunningChanged = cachedIsRunning != newIsRunning; cachedIsRunning = newIsRunning; addedThreads = runtime.Threads; runtime.ThreadsChanged += DbgRuntime_ThreadsChanged; } RuntimesChanged?.Invoke(this, new DbgCollectionChangedEventArgs <DbgRuntime>(runtime, added: true)); if (addedThreads.Length != 0) { ThreadsChanged?.Invoke(this, new DbgCollectionChangedEventArgs <DbgThread>(addedThreads, added: true)); } if (raiseStateChanged) { OnPropertyChanged(nameof(State)); } if (raiseIsRunningChanged) { IsRunningChanged?.Invoke(this, EventArgs.Empty); } if (raiseDebuggingChanged) { OnPropertyChanged(nameof(Debugging)); } }
public void RegisterRuntime(TargetRuntime runtime) { runtime.FrameworksInitialized += HandleRuntimeInitialized; runtimes.Add(runtime); RuntimesChanged?.Invoke(this, EventArgs.Empty); }