завершение работы многопоточного приложения Winform C # без блокировки потока пользовательского интерфейса - PullRequest
0 голосов
/ 17 февраля 2012

Я ожидаю завершения этих потоков в обработчике событий закрытия основной формы, но поток пользовательского интерфейса заблокирован, есть ли лучшее решение?

это фрагмент кода:

 public partial class Form1 : Form
{
    private Thread _worker;
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        _worker.Join();

    }

Я надеюсь отобразить форму прогресса, ожидающую завершения рабочего потока, как это сделать?

1 Ответ

0 голосов
/ 17 февраля 2012

Вы присоединяете поток _worker к текущему потоку (поток пользовательского интерфейса). это причина, почему пользовательский интерфейс зависает.

Если вы хотите, чтобы _работник завершил работу до закрытия приложения, я хотел бы предложить следующую идею.

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
        // Check worker thread complete or not
        if (_worker.ThreadState != ThreadState.Stopped)
        {
            e.Cancel = true;
            MessageBox.Show("Not complete, please wait");
        }
}

Я надеюсь, что это сработает для вас.

...