Показывая загрузочный экран со спиннером в отдельном потоке во время работы, ShowDialog работает, но Show не работает - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь показать форму со счетчиком посередине в качестве экрана загрузки (не индикатора прогресса), выполняя долгую работу и, наконец, показывая форму с результатами, я позволяю другому потоку обрабатывать экран загрузки, но когда я использую 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        
}

1 Ответ

0 голосов
/ 05 января 2019

Наконец, это сработало для меня, я не уверен, что это правильный подход, но он отлично справляется со своей задачей. Код:

Thread  t1 = new Thread(() =>
            {
                Loading l = new Loading();

                Thread t2 = new Thread(() => {

                    while (!ThreadExitFlag)
                    {

                    }

                    l.Invoke(new Action(() => { l.Close(); }));

                });
                t2.Start();

                l.ShowDialog();


            });      
            t1.Start(); 


LongWork(); //this will trigger the ThreadExitFlag by the end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...