我有一个MainForm窗口,该用户可以按3个按钮。每个按钮都会启动新的表单,用户可以在其中执行他喜欢的任何操作(例如耗时的数据库调用等)。因此,我决定将每种形式放入其自己的线程中:

   private Thread subThreadForRaportyKlienta;
   private Thread subThreadForGeneratorPrzelewow;
   private Thread subThreadForRaporty;
   private void pokazOplatyGlobalne() {
           ZarzadzajOplatamiGlobalneDzp varGui = new ZarzadzajOplatamiGlobalneDzp();
           varGui.ShowDialog();
    }
    private void pokazRaportyKlienta() {
          RaportyDzpKlient varGui = new RaportyDzpKlient();
           varGui.ShowDialog();
    }
    private void pokazRaportyWewnetrzne() {
       RaportyDzp varGui = new RaportyDzp();
        varGui.ShowDialog();
    }
    private void pokazGeneratorPrzelewow() {
        ZarzadzajPrzelewamiDzp varGui = new ZarzadzajPrzelewamiDzp();
        varGui.ShowDialog();
    }
    private void toolStripMenuGeneratorPrzelewow_Click(object sender, EventArgs e) {
        if (subThreadForGeneratorPrzelewow == null || subThreadForGeneratorPrzelewow.IsAlive == false) {
            subThreadForGeneratorPrzelewow = new Thread(pokazGeneratorPrzelewow);
            subThreadForGeneratorPrzelewow.Start();
        } else {

        }

    }
    private void toolStripMenuGeneratorRaportow_Click(object sender, EventArgs e) {
        if (subThreadForRaporty == null || subThreadForRaporty.IsAlive == false) {
            subThreadForRaporty = new Thread(pokazRaportyWewnetrzne);
            subThreadForRaporty.Start();
        } else {

        }
    }
    private void toolStripMenuGeneratorRaportowDlaKlienta_Click(object sender, EventArgs e)
    {
        if (subThreadForRaportyKlienta == null || subThreadForRaportyKlienta.IsAlive == false) {
            subThreadForRaportyKlienta = new Thread(pokazRaportyKlienta);
            subThreadForRaportyKlienta.Start();
        } else {

        }
    }

我有几个问题,希望有人能解释一下:
  • 当我使用Show()而不是ShowDialog()时,窗口仅闪烁一秒钟,并且从不显示。两者之间的实际区别是什么?为什么会发生呢?
  • 当我使用ShowDialog时,一切似乎都正常,但我注意到并不是所有内容都正确地填入了gui的其中一个(即使您在Form_Load()中有3个简单的添加项,一个listView仍然为空。在其他两个GUI中也可以正常工作,我也可以在这些Forms中执行多个任务,也可以在后台更新这些表单(从Forms方法内部),为什么这个表单会有所不同?
  • 什么是正确的方法?以这些表格中的每一个执行的任务可能很耗时,我想让用户可以毫无问题地在这4个窗口之间跳转,以便他可以执行自己喜欢的事情。
  • 最佳答案

    区别在于Modal and Modeless Windows Forms


    Show()方法用于此目的

    关于c# - 启动多个gui(WinForms)线程,以便它们可以与C#中的一个主gui分开工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2359493/

    10-10 18:40
    查看更多