C# 启动表单错误,多个表单

C# 启动表单错误,多个表单,c#,C#,在我的启动代码中,我得到了一个错误。 这是一个单独的形式,以常规 public Form1() { InitializeComponent(); Thread t1 = new Thread(new ThreadStart(SplashForm)); t1.Start(); Thread.Sleep(5000); // The amount of time we want our splash form visib

在我的启动代码中,我得到了一个错误。 这是一个单独的形式,以常规

    public Form1()
    {

        InitializeComponent();
        Thread t1 = new Thread(new ThreadStart(SplashForm));
        t1.Start();
        Thread.Sleep(5000); // The amount of time we want our splash form visible
        t1.Abort();
        Thread.Sleep(1000);
    }
基本上是说新的线程开始Plashform

我在Splash表单上出错

splash表单是表单的名称。它表示它是一个类型,但用作变量


有什么想法吗

您必须在线程的构造函数上提供方法名,而不是类型表单。 你可以这样做:

public Form1()
{
    InitializeComponent();
    new SplashForm().ShowDialog();
}
在SplashForm类中:

class SplashForm : Form
{
     public SplashForm()
     {
         InitializeComponent();
         new Thread(run).Start();
     }

     private void run()
     {
         Thread.Sleep(5000);
         this.Invoke((MethodInvoker)delegate
         {
             this.Close();
         });
     }
 }

如果从另一个线程调用时出现异常,则应尝试MethodInvoker的技巧。

如果.NET版本>=3.5,则可以使用SplashScreen类:

无需编写任何代码来显示启动屏幕

从VisualStudio2008SP1开始,您可以使用默认设置快速配置启动屏幕


无论如何,您的代码是错误的,因为ThreadStart构造函数采用的是方法的名称,而不是表单所属的类型

ThreadStart构造函数采用方法的名称,而不是表单所属的类型。这不是实现启动屏幕的好方法,因为启动屏幕完成后,主表单仍将挂在后台并延迟加载。Google C SplashScreen,80000多个结果。可能重复超过.Net 3.5的要求,SplashScreen要求应用程序是WPF应用程序。由于OP正在谈论表单,我认为他将无法使用此功能。太好了,但有一个问题。。我收到一个异常:System.Windows.Forms.dll中发生了类型为“System.InvalidOperationException”的未处理异常。其他信息:跨线程操作无效:从创建控件“SplashForm”的线程以外的线程访问控件“SplashForm”。谷歌搜索错误消息将显示多个描述该事实的结果您不能从未创建元素的线程更改用户界面元素,并且您应该使用Control.Invoke来执行此操作。我不知道如何执行此操作,因为您单击的不是元素。。我真的很困惑:/真的很抱歉耽搁了,你应该试试编辑后的答案。
SplashScreen ss = new SplashScreen ("resource name");
ss.Show(true); // autoclose