线程中的TopMost表单?

syn*_*cis 9 c# forms multithreading topmost winforms

我使用以下代码在新线程中打开一个表单:

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();
}
Run Code Online (Sandbox Code Playgroud)

但是,即使我将其设置为true,新创建的表单也不是TopMost.

如何在线程TopMost中创建表单?

Cri*_*n T 5

通常你不需要另一个线程,你可以像往常一样在模态或非模态模式下打开表单,如果表单需要执行繁重的过程,那么你在一个线程内执行该过程.

具体到你的问题一个选项是描述从Application.Run运行的形式在这里.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Thread thread = new Thread(ThreadProc);
        thread.Start();
    }


    public void ThreadProc()
    {
        using (Form1 _form = new Form1())
        {
            _form.TopMost = true;
            Application.Run(_form);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将启动一个带有自己的消息泵的新线程,并将其保留为TopMost表单.