读书人

关于线程的有关问题

发布时间: 2012-03-01 10:25:47 作者: rapoo

关于线程的问题
请问如何实现在FormB关闭后,再显示FormA?谢谢!

namespace MultiThreadDialog
{
public class Form1 : System.Windows.Forms.Form
{
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void button1_Click(object sender, System.EventArgs e)
{
CShowDialog showdlg = new CShowDialog(this);
Thread t = new Thread(new ThreadStart(showdlg.ShowGraphicDialog));
t.Start();

// Show FormA
Form subFormA = new Form();
subForm.Text = "FormA ";

subFormA.ShowDialog(this);
}
}

public class CShowDialog
{
delegate void showdialog();
private Form m_parentForm;
public CShowDialog(Form mainForm)
{
m_parentForm = mainForm;
}

public DialogResult ShowGraphicDialog()
{
if (m_parentForm.InvokeRequired)
{
showdialog sdg = new showdialog(this.ShowGraphicDialog);
m_parentForm.Invoke(sdg);
return;
}

// Show FormB
Form subformB = new Form();
subformB.Text = "FormB ";
formB.ShowDialog(m_parentForm);
}
}
}

[解决办法]
把subFormA.ShowDialog(this);放到formB.ShowDialog(m_parentForm);后面塞
[解决办法]
请问如何实现在FormB关闭后,再显示FormA?

-------------------------------------
这个问题我也试过好久了,按你的意思,就是FormB 主窗体,而FormA通过,FormB来进行加载的新窗体。 在winForm 中,有一个主线程和子线程之分,如果主线程一但退出,子线程也将不会存在! 所以这个问题很难解决,建议你,只能FormB 进行隐藏。

继续光注中,我也希望有高手能对些问题进行完美的解答!!
[解决办法]
那你这样改一下代码:

CShowDialog showdlg = new CShowDialog(this);
Thread t = new Thread(new ThreadStart(showdlg.ShowGraphicDialog));
t.Start();
while (t.ThreadState != ThreadState.Stopped)
{
Application.DoEvents();
}
// Show FormA
Form subFormA = new Form();
subFormA.Text = "FormA ";

subFormA.ShowDialog(this);

读书人网 >C#

热点推荐