Tela de carregamento do trabalhador em segundo plano no WinForms
Eu tenho um formulário onde é possível entrar e pode demorar um pouco até que os dados sejam carregados no formulário. Então, eu queria criar um formulário separado (loadScreen.cs) com uma barra de progresso quando o formulário estiver carregando. Eu tentei isso no formulário loadScreen.cs:
private void Form1_Load(object sender, EventArgs e)
{
worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.WorkerSupportsCancellation = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.ProgressChanged +=
new ProgressChangedEventHandler(worker_ProgressChanged);
worker.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
int percentFinished = (int)e.Argument;
while (!worker.CancellationPending && percentFinished < 100)
{
percentFinished++;
worker.ReportProgress(percentFinished);
System.Threading.Thread.Sleep(50);
}
e.Result = percentFinished;
}
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.Close();
}
Eu li que o método worker_DoWork deve ter o código que leva mais tempo para carregar. Não sei como lidar com isso, pois meu botão está no Form1. Quando é clicado, eu vou para outra aula com
private void signIn_Click(object sender, EventArgs e)
{
var logIn = new LogIn(this);
logIn.checkUserInput(this);
}
e lá eu executo as operações que carregam certas coisas. Como conectar tudo? Eu preciso de ajuda!