示例#1
0
        private void StatusManager_OnStatusEntryUpdate_GUI()
        {
            while (true)
            {
                StatusManager.StatusEntry status_entry = null;
                //Utilities.LockPerfTimer l1_clk = Utilities.LockPerfChecker.Start();
                lock (status_entries_still_to_process_lock)
                {
                    //l1_clk.LockPerfTimerStop();
                    if (status_entries_still_to_process.Count > 0)
                    {
                        var pair = status_entries_still_to_process.First();
                        status_entry = pair.Value;
                        status_entries_still_to_process.Remove(pair.Key);
                    }
                }

                // Is there nothing left to do?
                if (null == status_entry)
                {
                    //Utilities.LockPerfTimer l2_clk = Utilities.LockPerfChecker.Start();
                    lock (status_entries_still_to_process_lock)
                    {
                        //l2_clk.LockPerfTimerStop();
                        status_entries_still_to_process_fresh_thread_running = false;
                        break;
                    }
                }

                // Process this entry
                StatusBarItem status_bar_item;
                if (!status_bar_items.TryGetValue(status_entry.key, out status_bar_item))
                {
                    status_bar_item = new StatusBarItem();
                    status_bar_items[status_entry.key] = status_bar_item;

                    ObjStatusBarContainer.Children.Clear();

                    var status_bar_items_ordered =
                        from status_bar_item_ordered in status_bar_items.Values
                        orderby status_bar_item_ordered.CreationTime ascending
                        select status_bar_item_ordered;

                    foreach (StatusBarItem child in status_bar_items_ordered)
                    {
                        ObjStatusBarContainer.Children.Add(child);
                    }
                }

                status_bar_item.SetStatus(status_entry);

                ExpungeStaleStatusBarItems();
            }
        }
        private void StatusManager_OnStatusEntryUpdate_GUI()
        {
            while (true)
            {
                StatusManager.StatusEntry status_entry = null;
                lock (status_entries_still_to_process)
                {
                    if (status_entries_still_to_process.Count > 0)
                    {
                        var pair = status_entries_still_to_process.First();
                        status_entry = pair.Value;
                        status_entries_still_to_process.Remove(pair.Key);
                    }
                }

                // Is there nothing left to do?
                if (null == status_entry)
                {
                    lock (status_entries_still_to_process)
                    {
                        status_entries_still_to_process_fresh_thread_running = false;
                        break;
                    }
                }

                // Process this entry
                StatusBarItem status_bar_item;
                if (!status_bar_items.TryGetValue(status_entry.key, out status_bar_item))
                {
                    status_bar_item = new StatusBarItem();
                    status_bar_items[status_entry.key] = status_bar_item;

                    ObjStatusBarContainer.Children.Clear();

                    var status_bar_items_ordered =
                        from status_bar_item_ordered in status_bar_items.Values
                        orderby status_bar_item_ordered.CreationTime descending
                        select status_bar_item_ordered;

                    foreach (StatusBarItem child in status_bar_items_ordered)
                    {
                        ObjStatusBarContainer.Children.Add(child);
                    }
                }

                status_bar_item.SetStatus(status_entry.key, status_entry.LastStatusMessage, status_entry.LastStatusMessageCancellable, status_entry.current_update_number, status_entry.total_update_count);

                ExpungeStaleStatusBarItems();
            }
        }