我想在我的应用程序中创建多个 UI 线程。我模拟了如下场景。我正在单击按钮创建一个新窗口/表单背景 thread
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var thread = new Thread(() =>
{
Form f = new Form();
Application.Run(f);
});
// thread.IsBackground = true; -- Not required. See Solution below
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
}
}
请注意 - 我正在执行 IsBackground = true ,因为当用户关闭主窗体时,子窗体/窗口也应该关闭。有没有更干净/优雅的方法来实现相同的目标?
编辑 - 我想为每个窗口创建专用的 UI 线程。我会
有10个这样的窗口并行显示实时数据。
Solution- 这样可以吗? (按照msdn http://msdn.microsoft.com/en-us/library/system.windows.forms.application.exit%28v=VS.100%29.aspx and Hans'评论如下)
已设置公寓状态(参见上面的代码)
protected override void OnClosed(EventArgs e)
{
Application.Exit();
}
弄乱线程迟早会咬你一口。
来自 MSDN:
Windows 窗体中的控件绑定到特定线程,并且不是线程安全的。因此,如果您从不同的线程调用控件的方法,则必须使用控件的调用方法之一将调用编组到正确的线程
当然,您可以使用任意数量的线程,但不要尝试创建解决方法以便能够使用不同的线程来更新 UI。使用Invoke
/InvokeRequired
相反,来自您的工作线程/后台线程。
使用扩展方法使其更清晰:自动化 InvokeRequired 代码模式 https://stackoverflow.com/questions/2367718/c-automating-the-invokerequired-code-pattern
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)