I have a Thread that starts in my main form
private void changePasswordbutton_Click_1(object sender, EventArgs e)
{
waitForm.Show();
Thread thread = new Thread(ProcessInkPresenter);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
waitForm.Hide();
waitForm.Dispose();
}
I want to close the waitForm inside the ProcessInkPresenter method (which is running on a thread) instead of waiting for the thread to complete.
How do I do this?
Thanks
Method signatures
private void ProcessInkPresenter()
Defined in the class header
Wait waitForm;
Your original code doesn’t make sense. It shows a form, then starts a thread, then waits for that thread to complete. If you want the form to be run on it’s own UI thread, have
ProcessInkPresenterrun on the same UI thread (which it should if it interacts with the UI) and have the form closed and be disposed of whenProcessInkPresentercompletes, try this:If the worker thread does not have to interact with the GUI, then what you want is something like the following. Note that I make use of Invoke to make sure that the interaction with the UI is done on the UI thread. There is no need to check InvokeRequired here, since I already know for sure that I am on a background thread.
If you want to keep the same waitForm instance:
NOTE: It doesn’t make sense to dispose your WaitForm if you have a single instance of it (your
Waitinstance). Either construct an instance each time you use it, or never dispose it and use.Hide()instead.