【问题标题】:Display the Form using Threads使用线程显示表单
【发布时间】:2014-04-09 08:55:43
【问题描述】:

这是我得到的:

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

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

如何让线程等到窗体关闭后再中止线程。

【问题讨论】:

  • 这是在 main 方法中吗?
  • 这个“InitializeComponent()”是干什么用的?

标签: c# .net multithreading winforms


【解决方案1】:

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

或者

最好将 Thread 声明为 public,并且只在 form closing 事件中中止 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;

【讨论】:

  • 你有什么解决办法吗?
  • 我有一个问题,它说“名称 t 在当前上下文中不存在”,它指向 t.Abort() 行。这是因为我没有公开这个话题,因为我不知道该怎么做。
  • 我最终写了 var frmLogin = new frmLoginForm() 并将除第一行之外的所有内容移出 LoginForm() 并将其放在 t.Start() 下并附加了 this.DialogResult = DialogResult 行。是的;形成关闭它的工作。非常感谢您的回答和所有回答的人。
【解决方案2】:

你可以试试这样的,

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

如果登录成功,则在您的 frmLogin 中将对话结果设置为 DialogResult.OK

【讨论】:

    【解决方案3】:

    继续 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() 方法。它是干什么用的?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多