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

C#线程:线程关闭后如何打开主窗体,c#,winforms,C#,Winforms,请原谅,如果这个问题与其他问题重复,我可能不知道如何正确地说出我的问题,这就是为什么我找不到合适的答案 我有一个带有多个表单的winforms C#应用程序。我的主窗体是一个登录窗体,在它之前是一个启动屏幕,首先加载。我的问题是,每当我点击注销,我希望它返回到登录屏幕。但是,启动屏幕将加载并不再打开登录表单 我怀疑这是因为我启动了一个新线程,以便能够关闭主窗体并打开下一个窗体?我在某个地方读到,我必须这样做,因为仅使用main.close()和form1.show()时会发生错误。帮忙 启动屏幕

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

我有一个带有多个表单的winforms C#应用程序。我的主窗体是一个登录窗体,在它之前是一个启动屏幕,首先加载。我的问题是,每当我点击注销,我希望它返回到登录屏幕。但是,启动屏幕将加载并不再打开登录表单

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

启动屏幕代码

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());
}
登录退出(重定向到用户主页)


我不认为你需要开始一个新的线程来打开/关闭你的表单。请尝试以下代码:

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

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

请注意,
Form.Close()
将处理表单对象,这意味着对象中创建的所有资源也将关闭
Form.Hide()
也会从用户的视图中隐藏表单。

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

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

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

请注意,
Form.Close()
将处理表单对象,这意味着对象中创建的所有资源也将关闭
Form.Hide()
也会从用户的视图中隐藏表单。

我也有同样的要求,我编写了以下代码

在Main()下的Program.cs中

登录表单中-在满足身份验证后,编写以下代码

this.DialogResult = DialogResult.OK;
this.Close();
这将关闭您的登录表单并返回Program.cs,然后将加载您的家庭管理员

在主页管理中,点击一个注销按钮,并在点击事件中编写以下代码

this.Close();
login f1=new login();
f1.Show();
现在,您将注销,并返回登录屏幕

注意:不要使用此选项。关闭();在主窗体中,这可能会退出您的应用程序。你可以使用这个;在这样的追逐中

希望这能帮助你。
试试这个,然后带着你的评论回来。

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

在Main()下的Program.cs中

登录表单中-在满足身份验证后,编写以下代码

this.DialogResult = DialogResult.OK;
this.Close();
这将关闭您的登录表单并返回Program.cs,然后将加载您的家庭管理员

在主页管理中,点击一个注销按钮,并在点击事件中编写以下代码

this.Close();
login f1=new login();
f1.Show();
现在,您将注销,并返回登录屏幕

注意:不要使用此选项。关闭();在主窗体中,这可能会退出您的应用程序。你可以使用这个;在这样的追逐中

希望这能帮助你。
尝试此操作并返回您的评论。

应用程序。运行(表单)
用于在当前线程上运行新应用程序。这是你的意图吗?你只是想显示新表单吗?@mhornfeck我只想关闭我的主表单,然后打开另一个表单。你能将处理单击事件的代码发布到注销吗?
应用程序。Run(form)
用于在当前线程上运行新应用程序。这是你的意图吗?你只是想显示新表单吗?@mhornfeck我只想关闭我的主表单,然后打开另一个表单。你能发布处理单击事件的代码以注销吗?如果我这样做,我的初始屏幕将不再显示。我的启动屏幕的实现是否也不正确?我用穿线的方法:|我认为这不是一个好方法。我会在SplashScreen窗体中使用计时器,在5秒后关闭窗体。如果我这样做,我的SplashScreen将不再显示。我的启动屏幕的实现是否也不正确?我用穿线的方法:|我认为这不是一个好方法。我会在SplashScreen窗体中使用计时器,它会在5秒后关闭窗体。