C#在新线程或任务中打开表单?

时间:2017-11-22 15:40:06

标签: c# multithreading winforms visual-studio

如何使用线程或任务在C#中打开新表单。

示例:

public void openform()
{
    Form _form = new Form();
    _form.show()
}

Thread _thread = new Thread(openform);
_thread.start();

如果我使用线程,它会打开表单并再次关闭它。

3 个答案:

答案 0 :(得分:2)

如果只是将ApartmentState设置为STA并启动另一个消息循环,可以创建另一个UI线程:

Thread _thread = new Thread(() =>
{
    Application.Run(new Form());
});
_thread.SetApartmentState(ApartmentState.STA);
_thread.Start();

请注意,您无法显示在此表单上的主线程上创建的控件。这就是为什么创建多个UI线程通常是一个坏主意。

答案 1 :(得分:-1)

Thread thd = new Thread(() =>
            {

                //Do Some stuff 
                //Do some more stuff

                var dispatcher = Dispatcher.CurrentDispatcher;
                dispatcher.UnhandledException += Dispatcher_UnhandledException; //you exception handling logic
                Dispatcher.Run();
            });
            thd.IsBackground = true;
            thd.SetApartmentState(ApartmentState.STA);
            thd.Start();

完成后根据您的用例调用Dispacther.InvokeShutdown();

答案 2 :(得分:-2)

使用ShowDialog仅在关闭窗口时返回:

new Thread(() => new MyForm().ShowDialog()).Start();