private void FilterRoms(Filter filter = null)
        {
            if (updating)
            {
                return;
            }

            FilteredRoms.Clear();
            //DateTime begin = DateTime.Now;

            if (filter == null)
            {
                filter             = new Filter();
                filter.text        = textBoxFilter.Text;
                filter.platform    = comboBoxPlatform.Text;
                filter.label       = comboBoxLabels.Text;
                filter.genre       = comboBoxGenre.Text;
                filter.publisher   = comboBoxPublisher.Text;
                filter.developer   = comboBoxDeveloper.Text;
                filter.year        = comboBoxYearReleased.Text;
                filter.status      = comboBoxStatus.Text;
                filter.favorite    = checkBoxFavorite.Checked;
                filter.text        = filter.text.ToLower();
                filter.textType    = comboBoxFilter.Text;
                filter.arcade      = checkBoxArcade.Checked;
                filter.console     = checkBoxConsole.Checked;
                filter.handheld    = checkBoxHandheld.Checked;
                filter.cd          = checkBoxCD.Checked;
                filter.romfile     = dataGridView.SelectedRows.Count == 0 ? "" : ((Rom)dataGridView.SelectedRows[0].Tag).Name;
                filter.romplatform = dataGridView.SelectedRows.Count == 0 ? "" : ((Rom)dataGridView.SelectedRows[0].Tag).Platform.Name;
            }

            dataGridView.SuspendLayout();
            Thread.BeginCriticalRegion();

            FilteredRoms = FilterFunctions.FilterRoms(filter);

            Thread.EndCriticalRegion();
            dataGridView.ResumeLayout();
            //DateTime end = DateTime.Now;
            AddRomsToGrid(FilteredRoms);
            //FormCustomMessage.Show((end - begin).ToString());
        }