Я пытаюсь показать форму со счетчиком посередине в качестве экрана загрузки (не индикатора прогресса), выполняя долгую работу и, наконец, показывая форму с результатами, я позволяю другому потоку обрабатывать экран загрузки, но когда я использую show()
, он просто показывает черное окно (как будто оно застряло), а иногда он просто мигает, в то время как использование ShowDialog()
работает отлично, но блокирует поток, и теперь я должен использовать Thread.Abort()
и Thread.ResetAbort()
чтобы убить нить, что я думаю, вы согласны, это не очень хороший способ справиться с этим. поэтому мой вопрос, почему ShowDialog()
работает, а Show()
нет.
Я пытался использовать async
и await
методы, которые я нашел здесь, но всегда возвращаюсь к ShowDialog()
, что мне не хватает? и есть ли безопасный способ выйти из нити здесь?
public void button1_Click(object sender, EventArgs e)
{
t1 = new Thread(() =>
{
Loading l = new Loading();
l.Show(); //Doesn't work
l.ShowDialog(); //Works but thread will be blocked
while (!ThreadExitFlag)
{
}
l.Close();
});
t1.Start();
LongWork(); //this will trigger the ThreadExitFlag by the end
}