使用线程显示表单

时间:2014-04-09 08:55:44

标签: c# .net multithreading winforms

这就是我所拥有的:

Thread t = new Thread(new ThreadStart(LoginForm));
t.Start();
Thread.Sleep(7500);
t.Abort();
InitializeComponent();

public void LoginForm()
{
    Application.Run(new frmLoginForm());
}

如何在中止线程之前让线程等到表单关闭。

3 个答案:

答案 0 :(得分:2)

您可以使用ShowDialog()方法显示表单,here是MSDN

最好将Thread声明为public并且只在form closing event

中中止Thread
Thread t = new Thread(new ThreadStart(LoginForm));
t.Start();

InitializeComponent();

public void LoginForm()
{
    LoginForm  frmLogin=new LoginForm();                
    DialogResult dr =  frmLogin.ShowDialogue();
    if (dr == DialogResult.Yes)
    {
        t.Abort();
    }
}

并在表单结束事件中将DialogResult属性设置为

this.DialogResult = DialogResult.Yes;

答案 1 :(得分:1)

您可以尝试这样的事情,

var frmLogin = new FrmLogin();
if (frmLogin.ShowDialog() == DialogResult.OK)
{
  Application.Run(new frmMainForm());
}

并在你的frmLogin中如果登录正常则将对话框结果设置为DialogResult.OK

答案 2 :(得分:0)

继续使用SumeshK的解决方案,我将采用不同的方法:

public void SomeMethod()
{
    Thread t = new Thread(new ThreadStart(LoginForm));
    t.Start(); 
    t.Join();   
    InitializeComponent();
}

public void LoginForm()
{
    LoginForm  frmLogin=new LoginForm();                
    frmLogin.ShowDialog();
}

方法ShowDialog本身会阻止你的线程终止/完成。这应该工作。但我怀疑InitializeComponent()方法。这是为了什么?