예제 #1
0
        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)); }
예제 #2
0
 public void UnregisterRuntime(TargetRuntime runtime)
 {
     if (runtime == CurrentRuntime)
     {
         return;
     }
     DefaultRuntime = CurrentRuntime;
     runtimes.Remove(runtime);
     runtime.FrameworksInitialized -= HandleRuntimeInitialized;
     RuntimesChanged?.Invoke(this, EventArgs.Empty);
 }
예제 #3
0
        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));
            }
        }
예제 #4
0
 public void RegisterRuntime(TargetRuntime runtime)
 {
     runtime.FrameworksInitialized += HandleRuntimeInitialized;
     runtimes.Add(runtime);
     RuntimesChanged?.Invoke(this, EventArgs.Empty);
 }