I do not understand why a separate thread is required for this.
Also, Application.Run will create a new message loop and that is not necessary.
Please clarify one thing for me. Do you need to show the login form only once or do you need to allow the user to logout and then login again? If the former; if you need to show the login just once; then a good solution is to show the login form at the beinning of the program, in the Program class in the Program.cs file.
Perhaps the only thing you need to do differently in the code you had originally is to use ShowDialog instead of Show.
If you want the login form ot be modeless instead of modal, then a solution that I often use is to show and hide the other form; the login form instead of creating a new instance every time.
Actually, now that I think about it, I think the only problem with your original code is probably that you have the "this.Close()" in the wrong place. You need to have it in the Login form and you probably do not.
Please, let us first understand what you need to do before we try to suggest solutions. I think the requiremetns are not defined welll enough.
Thinking is a feeling; pleasant for some and unpleasant for others.