public WarningWindow(uint memoryExceededThreshold, WarningType warningType, UserSettings userSettings)
        {
            InitializeComponent();
            this.userSettings            = userSettings;
            killMode                     = (warningType == WarningType.kill);
            this.memoryExceededThreshold = memoryExceededThreshold;
            Icon = SharedStatics.ToImageSource(Properties.Resources.bars_white);

            //Formatter helper for the table settings, will likely expand in the future.
            memoryHogsFormatter = new TableFormatter(memoryHogs);

            //Set the GUI labels
            memoryValue.Content = memoryExceededThreshold;
            SetSystemMemoryPercentAndLabel();

            //Build the table with data
            RefreshProcessTable(userSettings.warningWindowProcessMin, userSettings.warningWindowProcessMax, userSettings.warningWindowProcessPercentMin);
            memoryHogs.ItemsSource = processTable;

            //Enable live sorting in the window too, if data updates but I don't resort
            memoryHogs.Items.SortDescriptions.Add(new SortDescription("ramPercent", ListSortDirection.Descending));
            memoryHogs.Items.IsLiveSorting = true;

            //Be passive/aggressive/kill
            if (warningType == WarningType.passive)
            {
                SharedStatics.FlashWindow(this, SharedStatics.FLASHW_ALL | SharedStatics.FLASHW_TIMERNOFG, 1, 1);
            }
            else if (warningType == WarningType.aggressive)
            {
                this.Show();
                this.Activate();
                this.Topmost = true;
                SharedStatics.FlashWindow(this, SharedStatics.FLASHW_ALL, flashCount: 3);
            }
            else if (warningType == WarningType.kill)
            {
                //Will do the kill tasks in the next timer cycle so this constructor can finish
                this.Show();
                this.Activate();
                this.Topmost = true;
                SharedStatics.FlashWindow(this, SharedStatics.FLASHW_ALL, flashRate: 200, flashCount: 6);
            }

            //Start the update timer
            refreshTimer          = new System.Windows.Forms.Timer();
            refreshTimer.Tick    += RefreshTimer_Tick;
            refreshTimer.Interval = 1000;
            refreshTimer.Start();
        }