Beispiel #1
0
        public MonitoredAction Start(string description, bool cancelable = false, bool progressable = false)
        {
            lock(locker)
            {
                var threadId = Thread.CurrentThread.ManagedThreadId;
                if(!runningActions.ContainsKey(threadId))
                {
                    runningActions.Add(threadId, new Stack<MonitoredAction>());
                }

                var actions = runningActions[threadId];
                var action = new MonitoredAction(this, description, cancelable, progressable); 
                actions.Push(action);

                UpdateDialog();

                return action;
            }
        }
        public MonitoredAction Start(string description, bool cancelable = false, bool progressable = false)
        {
            lock (locker)
            {
                var threadId = Thread.CurrentThread.ManagedThreadId;
                if (!runningActions.ContainsKey(threadId))
                {
                    runningActions.Add(threadId, new Stack <MonitoredAction>());
                }

                var actions = runningActions[threadId];
                var action  = new MonitoredAction(this, description, cancelable, progressable);
                actions.Push(action);

                UpdateDialog();

                return(action);
            }
        }
        private void UpdateDialog()
        {
            lock (locker)
            {
                var h = Handler;
                var actionsToRemove = new List <int>();
                foreach (var action in runningActions)
                {
                    MonitoredAction current = null;
                    while (true)
                    {
                        current = action.Value.Count > 0 ? action.Value.Peek() : null;
                        if (current != null && current.IsFinished)
                        {
                            action.Value.Pop();
                            continue;
                        }
                        break;
                    }

                    if (current == null)
                    {
                        actionsToRemove.Add(action.Key);
                        if (h != null)
                        {
                            h.Finish(action.Key);
                        }
                        continue;
                    }

                    if (h != null)
                    {
                        h.Update(action.Key, current.Description, current.Progress);
                    }
                }

                foreach (var actionToRemove in actionsToRemove)
                {
                    runningActions.Remove(actionToRemove);
                }
            }
        }