我已经阅读了这个问题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?
感谢
答案 0 :(得分:2)
我建议您不尝试在非UI线程上创建表单,除非您有非常令人信服的理由这样做。这样做会产生复杂性,可以通过使用其他更标准的方法来避免。
例如,如果您希望在后台为每个表单进行处理,则可以为每个单独的表单使用BackgroundWorker实例。
如果您有一个长时间运行的进程,例如您链接到的问题中指出的进程,该进程可以使用事件来请求通过标准UI线程显示表单。