I’m writing a program that can take quite a bit to load(5-30 seconds). I’m wanting to have a form that starts with a marquee style progress bar, so that the user knows there’s something being done.
public FrmMain()
{
var loading = new FrmLoading();
loading.Show();
InitializeComponent();
// other start up code here
loading.Close()
}
Now, loading pops up just fine. The problem is that the label and the progress bar show as nothing, and it almost looks like they are crashing. I’ve looked into the BackgroundWorker, but, honestly, I don’t fully comprehend how to make that work for me. I tried to follow the tutorials and examples at:
But my head just isn’t grasping it. Is there any other way to get the form to load properly? Thanks for any and all help.
EDIT
My BackgroundWorker attempt included me creating a function which performed all the actions that were done in my FrmMain. So, I had:
public FrmMain()
{
Loading = new FrmLoading();
Loading.Show();
backgroundWorker1.RunWorkerAsync();
}
private void FormLoading()
{
// Initialize and loading elements of the form
InitializeComponent();
}
private void BackgroundWorker1DoWork(object sender, DoWorkEventArgs e)
{
FormLoading();
}
private void BackgroundWorker1RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Loading.Close();
}
But I kept getting NullReferenceException on the backgroundWorker1.RunWorkerAsync();
An little-known or often-forgotten framework library is Microsoft.VisualBasic. You can use it with C# apps. Just add a Reference … and this class. It handles all background worker threading and the rest.
Finally, change the app launch under Program.Main() from:
to
If you aren’t familiar, this class also offers more features like Single-Instance Handling that are definitely worth a look.