从非GUI线程创建窗体

本文关键字:窗体 创建 线程 GUI 从非 | 更新日期: 2024-10-21 19:50:04

我读过关于如何在非gui线程C#中创建表单的问题,但它对我没有帮助。

我有一个表格列表,里面有一个玩家列表,每个玩家都有自己的表格(我在Player.cs和playperformer.cs中分开)

问题是:如果我使表继承自Form(显示Form并使visible=false,因此它不显示),那么我可以使Methodinvoker

//table.cs
class Table : Form{
    var player = Players.First();
    this.Invoke(new MethodInvoker(player.ShowForm));
//player.cs
void ShowForm() {
    var form = new PlayerForm();
    form.show();
}

这是有效的,没有任何问题或副作用。但是有点讨厌,从Form继承Class,只是为了使用Invoke。(我的桌子不需要表格,所以我想解决这个问题)

如果我没有表单,如何使用invoke?

感谢

从非GUI线程创建窗体

我建议您不要尝试在非UI线程上创建表单,除非您有非常令人信服的理由这样做。这样做会产生复杂性,可以通过使用其他更标准的方法来避免。

例如,如果您希望在后台对每个表单进行处理,则可以对每个单独的表单使用BackgroundWorker实例

如果您有一个长时间运行的进程,如您链接到的问题中所示,该进程可以使用事件请求通过标准UI线程显示表单。