如何从其他线程为winform生成GUI?

时间:2014-02-19 08:55:21

标签: c# multithreading winforms

我需要通过Thread2的结果在Thread1中为winform生成GUI!

但是Thread1从Thread2开始。

如果Thread2的结果等于1,我需要在我的winfrom上显示一个网格,否则在我的Winform上显示一个选项卡控件。

4 个答案:

答案 0 :(得分:1)

UI线程必须构建它或至少将其添加到表单中。

但是在线程2中,您可以收集所有必需的信息或控件,并通过调用或BackgroundWorker结果传递给UI线程。

答案 1 :(得分:1)

您应该只保留一个UI线程,而不要在另一个线程中创建任何UI元素。

Microsoft有很多关于此主题的文章,并演示了处理异步操作的正确方法,例如

http://msdn.microsoft.com/en-us/library/ms951089.aspx

答案 2 :(得分:0)

如果我理解正确,则需要在一个线程中创建GUI元素,以便以后在GUI线程中使用它们。

据我记得,这是不可能的,因为控件会记住它创建的线程,然后检查是否在该线程内进行了调用。

我建议您仅在后台线程中生成数据并将其传递给gui线程,您可以在其中绑定此数据或生成ui元素来表示它。此外,它符合关注点分离的最佳实践。

Lex Li在关于将数据传递给GUI线程的问题的评论中发布了link

答案 3 :(得分:0)

我不确定,我能正确理解您的问题,但这是在不同的线程中创建UI控件的代码。

var th = new Thread(() =>
    {
        //A sample form with a RichTextBox control.
        var f = new Form();
        f.Controls.Add(new RichTextBox() { Dock = DockStyle.Fill });

        Application.Run(f);
    });

th.SetApartmentState(ApartmentState.STA);
th.Start();