Я инициирую поиск, а затем покажу результаты этого поиска в форме.Form.Show freezes window, Form.ShowDialog блокирует выполнение. Какие у меня есть другие варианты?
Если я использую .Show()
, форма замораживается. Если я использую .ShowDialog()
, форма появляется, но поиск не завершается, так как элемент управления не возвращается в поток до тех пор, пока форма не будет закрыта.
Способ .ShowDialog()
работает во втором вызове, как только форма инициализируется, поскольку метод инициализации вызывает активацию кода else. Но я бы хотел, чтобы это работало при первом вызове.
Код выглядит следующим образом.
public static void Search(string searchstring)
{
IntializeSearchResultsForm()
List<searchitem> templist = searchmethod(searchstring);
SearchForm.Invoke((MethodInvoker) (() => SearchForm.SetSearchResultsData(tempList)));
}
public static void IntializeSearchResultsForm()
{
if (SearchForm == null)
{
SearchForm = new SearchForm();
SearchForm.Show(); OR SearchForm.ShowDialog();
}
else
{
SearchForm.Invoke(new MethodInvoker(SearchForm.Activate));
}
}
UPDATE с большим количеством деталей кода:
public static List<PricerSearchResultEntry> searchmethod(string dealID)
{
List<PricerSearchResultEntry> tempResultsList = new List<PricerSearchResultEntry>();
foreach (String dir in pricerFolderArray)
{
if (Directory.Exists(dir))
{
string[] filesList = Directory.GetFiles(dir, "*" + dealID + "*");
foreach (String file in filesList)
{
if (AppContext.SearchPricersForm.PricersCheckBox)
{
if (file.Contains("pricer") && !file.Contains("Failed") && !file.Contains("Incomplete"))
{
tempResultsList.Add(ParseFileString(file));
}
}
}
}
}
tempResultsList.Sort((x, y) => y.ValuationDate.CompareTo(x.ValuationDate));
return tempResultsList;
}
public SearchForm()
{
InitializeComponent();
searchResultsListBox.DisplayMember = "Title";
searchResultsListBox.ValueMember = "DealID";
searchResultsListBox.DataSource = searchResultsList;
}
Какое у вас ожидаемое поведение? –
Довольно уверен, что в этом коде не происходит «замораживания». Что вы делаете в конструкторе SearchForm, что в этом событии Form_Load и, наконец, что происходит в _searchMethod_ выше – Steve
Вскоре добавит код, дежурные звонки. – Hardycore