Я столкнулся с проблемой, которую, похоже, не могу найти решение, я прочитал несколько ответов и понял, что мне нужен поток BackgroundWorker, чтобы это решение работало, но я Я все еще сталкиваюсь с небольшой проблемой.
У меня есть вторая форма небольшого размера, установленная по центру на экране с установленным в Marquee стилем ProgressBar, в этой второй форме больше ничего нет, поскольку она предназначена для эмуляции строки загрузки.
В моей части кода, интенсивно использующей данные, в основной форме, где он собирает и анализирует данные из базы данных, я написал это так:
GetData()
{
bwLoading.RunWorkerAsync();
//Runs all the processing
bwLoading.CancelAsync();
}
Фоновый работник определен как таковой ниже, также в основной форме.
private void bwLoading_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
frmLoading lb = new frmLoading();
bool running = true;
while (running)
{
if ((worker.CancellationPending == true))
{
lb.Close();
running = false;
}
else
{
lb.Show();
}
}
}
Проблема, с которой я столкнулся, заключается в том, что при использовании этого метода отображается форма загрузки, которая содержит индикатор выполнения, который отображается, когда данные начинают собираться и обрабатываться, и исчезает, когда загрузка данных завершена, но окно пустое. как будто он пытается загрузить, но это не так. Я не могу понять, почему это не работает.
Разве фоновый работник не создает отдельный поток для использования в форме загрузки? Или я что-то упускаю из своего чтения?