I am using the following code to open a form in a new thread:
private void button1_Click(object sender, EventArgs e)
{
Thread thread = new Thread(ThreadProc);
thread.Start();
}
public void ThreadProc()
{
Form form = new Form();
form.TopMost = true;
form.ShowDialog();
}
But the newly created form isn't TopMost even though I set it to true.
How can I make a form in a thread TopMost ?
Just ran into this problem myself. It seems that if the form has an
Owner
, thenTopMost
works as expected. If the owning form was created on another thread, though, it's a little tricky to set. Here's what I used:Usually you don't need another thread, you open the form as usual in modal or non modal mode, if the form needs to do a heavy process then you do the process inside a thread.
Specific to your question one option is to run the form from an Application.Run as described here.
That will launch a new thread with its own message pump and will keep it as a TopMost form.
Instead of calling ShowDialog directly, try using this.Invoke to gain ownership of the form.