我有一个 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 中并没有正确填充所有内容(一个 listView 保持空白,即使Form_Load() 中有 3 个简单的添加项)
。我只在一个 GUI 中注意到这一点,即使你乍一看在其他两个 GUI 中一切正常,我也可以在这些表单中执行多个任务,也在后台更新这些表单(从表单方法内部)。为什么会这样一个不一样? - 这样做的正确方法是什么?在这些表单中的每一个中执行的任务都可能非常耗时,我想让用户可以毫无问题地在这 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/