从非GUI线程创建表单

时间:2012-08-07 03:59:07

标签: c# winforms

我已经阅读了这个问题How to Create Form from within non gui thread C#,但它没有帮助我。

我有一个表列表,其中包含一个玩家列表,每个玩家都有自己的表格(我将它分隔在player.cs和playerform.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?

感谢

1 个答案:

答案 0 :(得分:2)

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

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

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