C# 显示同一表单的多个实例?

C# 显示同一表单的多个实例?,c#,winforms,C#,Winforms,我正在处理的WinForm应用程序有一些严重问题。 目前,我正在使用Form1.ShowDialog();显示窗体。此代码包含在后台工作程序中,用于查找数据库中的更改。使用Form1.ShowDialog();一次只允许打开一个表单,即使数据库有多个更改。如果数据库中有多个更改,我希望同时打开多个表单 当我使用Form1.Show();,应用程序崩溃了。出于某种原因,Show()方法使表单无法正确显示(表单中的所有元素都丢失) 我能做些什么来让我的代码按照我想要的方式工作吗 编辑:下面是一段代码

我正在处理的WinForm应用程序有一些严重问题。
目前,我正在使用Form1.ShowDialog();显示窗体。此代码包含在后台工作程序中,用于查找数据库中的更改。使用Form1.ShowDialog();一次只允许打开一个表单,即使数据库有多个更改。如果数据库中有多个更改,我希望同时打开多个表单

当我使用Form1.Show();,应用程序崩溃了。出于某种原因,Show()方法使表单无法正确显示(表单中的所有元素都丢失)

我能做些什么来让我的代码按照我想要的方式工作吗

编辑:下面是一段代码片段

//result is a linq result
foreach (var row in result)
{
Form1 Form = new Form1();
Form.ShowDialog();
}

看了第一眼,我可以告诉你:

  • Showdialog无法按预期方式工作:此方法会使所有者在对话框关闭之前处于非活动状态。在您的情况下,循环将在第一个showdialog时暂停,然后在关闭表单、打开新表单时继续,依此类推,直到循环完成
  • 至于“显示”问题,即创建空表单,我需要更多信息。其余的代码和您得到的异常

    • 我头顶上的两点:

      1) 要打开多个表单,请使用非模态(无模态)方法(我认为 show()方法)。例如,见


      2) 我不确定您是否可以从非UI线程调用与UI相关的方法。您可能希望从工作线程向您的UI线程发送事件,UI线程将调用show方法

      发布代码的相关部分,以便我可以对其进行分析,请…以及应用程序“爆炸”方式的一些详细信息(异常消息等)。show()时添加了代码段;使用时,foreach循环将继续循环(即使结果中只有一行),并显示缺少元素的表单。它可能会崩溃,因为您没有从UI线程调用Show()。看见