C#Threading:如何在线程关闭后打开主窗体

时间:2012-01-24 20:01:34

标签: c# winforms

请原谅我,如果这个问题与他人重复,我可能不知道如何正确地说出我的问题,这就是为什么我找不到合适的答案。

我有一个具有多种形式的winforms C#应用程序。我的主要表单是一个登录表单,之前是一个首先加载的启动画面。我的问题是每当我点击退出时,我都希望它返回登录界面。但是,启动画面加载并且不再打开登录表单。

我怀疑这是因为我开始了一个新的线程,能够关闭主窗体并打开下一个窗体?我在某处读到了我必须这样做,因为仅使用main.close()和form1.show()时会发生错误。帮助

SPLASH SCREEN CODE

public SplashScreen()
{
   InitializeComponent();
}

private void timer1_Tick(object sender, EventArgs e)
{
    progressBar1.Increment(1);
    if (progressBar1.Value == 100) timer1.Stop();
}

登录开始

public LOGIN()
{
   Thread t = new Thread(new ThreadStart(SplashScreen));
   t.Start();
   Thread.Sleep(5000);
   InitializeComponent();
   t.Abort();
}

public void SplashScreen()
{
   Application.Run(new SplashScreen());
}

登录退出(重定向到用户的主页)

public static void OpenHomeAdmin() // new thread to open home ADMIN
{
    Application.Run(new Home_Admin());
}

if (usertype == "UT1") //admin rights
{
     //GET LOGGED USER
      Home_Admin homeAdmin = new Home_Admin();
      homeAdmin.SetUsername(username);

      this.Close();
      System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(OpenHomeAdmin));
      t.Start();
 }

2 个答案:

答案 0 :(得分:1)

我也有同样的要求,我写了下面的代码!

在Main()

下的 Program.cs
Application.Run(new Splash()); //Splash Screen if u wanna run BEFORE Login Form

/*Showing Login Form Before Entering the Main Form [Authentication]*/

login f1 = new login();
DialogResult dr = f1.ShowDialog();
if (dr == DialogResult.OK)
{             
  Application.Run(new Splash()); //Splash Screen if u wanna run AFTER Login Form
  Application.Run(new Home_Admin());
}
else
{
  Application.Exit();
} 
登录表单中的

- 满足身份验证后,请编写以下代码

this.DialogResult = DialogResult.OK;
this.Close();

这将关闭您的登录表单并返回Program.cs,然后将加载您的Home_Admin。

Home_Admin

创建一个Logout按钮并在click_event中编写以下代码

this.Close();
login f1=new login();
f1.Show();

现在你将被注销,然后你将回到登录界面。

注意:不要使用this.Close();在主表格中,这可能会退出您的申请。你可以用this.Hide();在这样的追逐中。

希望这会帮助你。 试试这个,然后回复你的评论。

答案 1 :(得分:0)

我不认为您需要启动新的线程才能打开/关闭您的表单。请尝试使用以下代码:

if (usertype == "UT1") //admin rights
{
     //GET LOGGED USER
      Home_Admin homeAdmin = new Home_Admin();
      homeAdmin.SetUsername(username);

      this.Hide();
      homeAdmin.Show();
 }

请注意Form.Close()将释放Form对象,这意味着在对象中创建的所有资源也将被关闭。 Read more hereForm.Hide()也可以隐藏用户视图中的表单。