我需要通过Thread2的结果在Thread1中为winform生成GUI!
但是Thread1从Thread2开始。
如果Thread2的结果等于1,我需要在我的winfrom上显示一个网格,否则在我的Winform上显示一个选项卡控件。
答案 0 :(得分:1)
UI线程必须构建它或至少将其添加到表单中。
但是在线程2中,您可以收集所有必需的信息或控件,并通过调用或BackgroundWorker
结果传递给UI线程。
答案 1 :(得分:1)
您应该只保留一个UI线程,而不要在另一个线程中创建任何UI元素。
Microsoft有很多关于此主题的文章,并演示了处理异步操作的正确方法,例如
答案 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();