Form.Owner在.NET 3.5中从单独的线程设置

时间:2011-03-01 21:59:57

标签: c# winforms multithreading .net-3.5

我正在编写一个测试应用程序,我需要将Form放在单独的线程上。

所以如果我从主线程创建Form窗口并设置它的.Owner =这一切都有效。 如果我产生线程UIThread并从新线程设置所有者我得到异常。 获取异常是可以理解的,因为您无法直接访问表单。 我的问题是有一条消息,我需要在主线程上捕获并执行BeginInvoke以将其推送到它的消息泵上吗?由于UIForm ShowInTaskbar设置为false,我需要单击任务栏中的主应用程序并使用其所有子窗口进行恢复。

private void UIThread() // New Thread call
{
        UIForm form = new UIForm();

        form.ShowInTaskbar = false;
        form.Owner = this;

        Application.Run(form); // Expected Exception
}

1 个答案:

答案 0 :(得分:0)

我不确定,每个应用程序只能调用一次Application.Run。看看这个是否适合你

Application.Run(new Form1());
-----------------
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        var thread = new Thread(
            () =>
                {
                    var form2 = new Form {Owner = this};
                });
        thread.Start();
    }
}