I wanted my program to show a loading message while it checks if the program has connected to a device... but i get an error when i try to close the splashform using the code
SplashForm.CloseForm();
the actual splashform code is...
class SplashForm
{
//Delegate for cross thread call to close
private delegate void CloseDelegate();
//The type of form to be displayed as the splash screen.
private static SplashForm splashForm;
static public void ShowSplashScreen()
{
// Make sure it is only launched once.
if (splashForm != null)
return;
Thread thread = new Thread(new ThreadStart(SplashForm.ShowForm));
thread.IsBackground = true;
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
static private void ShowForm()
{
splashForm = new SplashForm();
Application.Run(splashForm);
}
static public void CloseForm()
{
splashForm.Invoke(new CloseDelegate(SplashForm.CloseFormInternal));
}
static private void CloseFormInternal()
{
splashForm.Close();
}
...
}
in this code... I get a error message as "Object reference not set to an instance of an object" at the line
splashForm.Invoke(new CloseDelegate(SplashForm.CloseFormInternal));
what is the reason and solution?
The
Object reference not set to an instance of an object
message is the trademark of the NullReferenceException. Here, it means that yoursplashForm
field is null.Make sure that you have 1) called
SplashForm.ShowSplashScreen()
before you callSplashForm.CloseForm()
and 2) consider callingthread.Join()
inShowSplashScreen()
so you can be sure that by the time you leave that method,splashForm
is not null.