У меня есть простая функция, которая запускает поток с модальной формой, а затем ожидает закрытия формы.
private static bool GetSomeText()
{
Thread threadx = new Thread(GetSomeTextx);
threadx.SetApartmentState(ApartmentState.STA);
threadx.Start();
int i = 0;
const int secs = 6000;
while (threadx.IsAlive && i < secs)
{
Thread.Sleep(1000);
i++;
}
if (i >= secs) //timeout
{
try
{
threadx.Abort();
}
catch { }
MessageBox.Show("Timeout etc.");
return false;
}
else
{
return CheckText(Constants.inputedtext);
}
}
private static void GetSomeTextx()
{
WindowWrapper window = new WindowWrapper(Fun.GetForegroundWindow());
FormGetSomeText epa = new FormGetSomeText { displaytext=Constants.displaytext};
epa.ShowDialog(window);
Constants.inputedtext= epa.inputedtext;
}
Проблема в том, что после закрытия окна поток завершает работу с GetSomeTextx (), ноостается в подвешенном состоянии ... После этого, если я ставлю перерыв в "while (threadx.IsAlive && i переключиться на поток, появится сообщение «Нет доступного источника», а при нажатии «Показать разборку» будет показано «Разборка недоступна».
Этот код почти 1: 1.копия (в другом есть 2 текстовых поля вместо 1) другого случая, когда я должен получить значения таким образом, и он работает правильно ...
Что бы это могло быть?
Postdata: Попробовал уже добавить Thread.CurrentThread.Abort в конце GetSomeTextx без результата ...