Во-первых, ShowDialog () предотвратит выполнение остальной части кода до закрытия диалогового окна, чего вы никогда не делаете.
Даже когда он закроется, он оценит цикл while (который, скорее всего, будет ложным, поэтому пропущен), и тогда ваш фоновый работник будет завершен.
Если все, что вы делаете, это показывает диалоговое окно, то я просто делаю это в главном потоке, и ваш процесс загрузки выполняется в фоновом режиме.
- Пожарный фоновый рабочий (который загружает код)
- Показать диалог загрузки
- В случае события BackgroundWorkerCompleted закройте диалоговое окно загрузки
Попытайтесь получить все свои элементы пользовательского интерфейса в основном потоке пользовательского интерфейса.
Надеюсь, это поможет
EDIT:
На основании вашего комментария ...
public partial class MainForm:Form
{
LoadingScreen ls;
public MainForm()
{
}
public void StartLoad()
{
ls = new LoadingScreen(this.timerStart);
backgroundWorker.RunWorkerAsync();
ls.Show();
}
void backgroundWorkerDoWork(object sender, DoWorkEventArgs e)
{
//Loading code goes here
}
void BackgroundWorkerMainRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if(ls != null)
ls.Close();
}
}