飞溅屏幕不会消失

Jim*_*Del 0 c# splash-screen

我正在使用这里的Splash Screen .我喜欢它有多简单.但问题是,在我点击之前,启动画面不会消失.在IDE中运行时,它可以正常工作.有任何想法吗?我在这里附上代码,但由于某种原因它没有正确插入.

private System.Windows.Forms.Timer timer1;
//private Splash sp=null;

public Form1()
{
    InitializeComponent();

    Thread th = new Thread(new ThreadStart(DoSplash));
    //th.ApartmentState = ApartmentState.STA;
    //th.IsBackground=true;
    th.Start();
    Thread.Sleep(3000);
    th.Abort();
    Thread.Sleep(1000);
}

private void DoSplash()
{
    Splash sp = new Splash();
    sp.ShowDialog();
}

private void timer1_Tick(object sender, System.EventArgs e)
{
//      sp.Close();
}
Run Code Online (Sandbox Code Playgroud)

ang*_*son 6

首先,的方式,页面上的闪屏完成,使用Thread.Abort的,是不是做事情的正确方法.

永远不要调用Thread.Abort,除非您正在关闭线程所在的AppDomain.

让我重申一下强调.你应该调用Thread.Abort的唯一一次是你对Thread.Abort有足够的了解,以及它如何知道你永远不应该调用它.

请看一下StackOverflow上的另一个问题:c#中的多线程闪屏?.


如果您想保留现有的解决方案,可能更好的方法是将计时器放入启动屏幕窗体,将其计时器设置为您希望启动屏幕保留在屏幕上的时间,并在其Tick事件处理程序中调用Close.

在同一个场地,我只需关闭原始线程,然后删除其他线路.

换句话说,从该页面的第一个代码块开始,我将保留这两行:

Thread th = new Thread(new ThreadStart(DoSplash));
th.Start();
Run Code Online (Sandbox Code Playgroud)

在窗体上使用那个计时器,使窗体自动关闭,并且你的状态比试图掌握Thread.Abort更好.

哪个你不应该打电话.