c# - 启动多个 gui (WinForms) 线程以便它们可以与 C# 中的一个主 gui 分开工作?

标签 c# .net winforms multithreading c#-3.0

我有一个 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 {

        }
    }

我有几个问题,希望有人能解释一下:

  1. 当我使用 Show() 而不是 ShowDialog() 时,窗口只会闪烁一秒钟,而不会显示。这两者之间的实际区别是什么?为什么会这样?
  2. 当我使用 ShowDialog 时,一切看起来都很正常,但我注意到在其中一个 gui 中并没有正确填充所有内容(一个 listView 保持空白,即使 Form_Load() 中有 3 个简单的添加项) 。我只在一个 GUI 中注意到这一点,即使你乍一看在其他两个 GUI 中一切正常,我也可以在这些表单中执行多个任务,也在后台更新这些表单(从表单方法内部)。为什么会这样一个不一样?
  3. 这样做的正确方法是什么?在这些表单中的每一个中执行的任务都可能非常耗时,我想让用户可以毫无问题地在这 4 个窗口之间跳转,以便他可以执行他喜欢的操作。

最佳答案

区别在于 Modal and Modeless Windows Forms .

Modeless forms let you shift the focus between the form and another form without having to close the initial form

Show() 方法用于此目的

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

相关文章:

c# - 如何将字符串属性绑定(bind)到 ListBox 中的 TextBox

c# - 如何使用 POSTMAN 或任何客户端工具应用程序调用 RestFul WCF POST 服务?

c# - 将 Win32 窗口绘制到文件

c# - MSACCESS DateTIme SQL 查询

asp.net - WinForms 和 Asp 类库中的异常处理

c# - 将 VB.NET Winforms 应用程序移植到 C#

c# - 收据打印的中心文本

c# - assembly.CreateInstance 返回 null

c# - 增量创建字符串的所有排列 C#

.net - 如何以编程方式添加程序集引用