当使用ApplicationContext打开多个表单时,ShowDialog会冻结一个表单

时间:2016-05-10 09:33:30

标签: c# multithreading forms applicationcontext showdialog

我使用ApplicationContext显示2个相同表单的窗口。这很完美。但现在我必须在两个窗口中显示一个额外的对话框,用户可以在其中选择一些设置。

当我使用ShowDialog显示此对话框时,焦点仅在一个窗口中,另一个窗口被冻结,直到我关闭dialogForm。我知道这是因为showdialog以模态模式显示表单。

如何避免这种行为,让两种形式相互独立?我可以使用ApplicationContext吗?

的Program.cs:

class MyApplicationContext : ApplicationContext
{
    List<MainForm> forms = new List<MainForm>();

    public MyApplicationContext(int numForms)
    {
        for (int i = 0; i < numForms; i++)
        {
            forms.Add(new MainForm(i));
        }
    }
     void MyApplicationContext_FormClosing(object sender, FormClosingEventArgs e)
    {
        Application.Exit();
    }
}

[STAThread]
static void Main(string[] args){
       Application.EnableVisualStyles();
       Application.SetCompatibleTextRenderingDefault(false);
       MyApplicationContext ac = new MyApplicationContext(2);
       Application.Run(ac);
 }

MainForm.cs:

 public MainForm(int id)
 {
      InitializeComponent();
      this.Invoke(new MethodInvoker(delegate ()
      {
          DialogForm frm = new DialogForm ();
          frm.ShowDialog(this);
      }));
 }

0 个答案:

没有答案