在windowsForms中使用Threads

时间:2017-02-11 16:12:59

标签: c# winforms visual-studio

我设计并编码了一个程序,它有一个用于加载的启动画面。我使用了主窗体中的线程,它将完全关闭加载窗体并显示主窗体。 这个动作需要大约5000名女士 但是当我在程序中使用线程时,在5000 MS之后,Splash Screen将消失并且主窗体将正确显示。 但是在显示主窗体后1或2秒后,程序关闭并进入BreakMode! Donnow为什么。 这是我的代码。也许我的代码有问题。 提前感谢您的建议。

public MainForm()
{
    Thread t = new Thread(new ThreadStart(StartForm));
    t.Start();
    Thread.Sleep(7000);
    InitializeComponent();
    t.Abort();
}
public void StartForm()
{
    Application.Run(new frmSplashScreen());
}

(使用Visual Studio 2015 Enterprise) __________________________UPDATE___________________________ 我使用了这种方法https://stackoverflow.com/a/393870/17034并将表单名称更改为我的。 但是,当我使用我面对BreakingMode的程序时! 这让我发疯了 你的建议是什么? 有没有办法禁用这种模式? 这是我的新代码:

using System;

使用System.Windows.Forms;

使用Microsoft.VisualBasic.ApplicationServices;

namespace University

{

static class Program

{

    [STAThread]

    static void Main(string[] args)

    {

        Application.EnableVisualStyles();

        Application.SetCompatibleTextRenderingDefault(false);

        new MyApp().Run(args);

    }

}

class MyApp : WindowsFormsApplicationBase

{

    protected override void OnCreateSplashScreen()

    {

        this.SplashScreen = new frmSplash();

    }

    protected override void OnCreateMainForm()

    {

        System.Threading.Thread.Sleep(4500);

        this.MainForm = new MainForm();


    }

}

}

1 个答案:

答案 0 :(得分:3)

你的程序将有一个main.cs来启动你的from.cs并随后显示表单。您要做的是编辑main.cs,以便以非异步方式显示此其他表单。然后在启动屏幕上使用计时器,该计时器在启动时启动,然后在您希望打开的持续时间后关闭。然后main.cs将继续正常运行。

但是,这个答案是基于我已完成的工作,可能与您的项目无关。您可以发布一个git链接或其他代码吗,我会更新我的回答吗?