我如何为来自其他线程的通知生成 GUI



我需要使用 Thread2 的结果为 Thread1 中的 WinForm 生成一个 GUI。

但是,线程 1 应从线程 2 开始。

如果 Thread2 的结果等于 1,我需要在我的 WinForm 上显示一个网格。如果没有,我需要在我的 WinForm 上显示一个选项卡控件。

UI 线程必须生成它或至少将其添加到窗体中。

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

只应保留一个 UI 线程,切勿在另一个线程中创建任何 UI 元素。

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

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

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

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

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

Lex Li 在评论中发布了专门将数据传递到 GUI 线程的问题的链接。

我不确定,我是否可以正确理解您的问题,但这是在不同线程中创建 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();

最新更新