首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于线程的有关问题

2012-03-01 
关于线程的问题请问如何实现在FormB关闭后,再显示FormA?谢谢!namespaceMultiThreadDialog{publicclassForm

关于线程的问题
请问如何实现在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);

热点排行