Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在单独的线程上运行计时器_C# - Fatal编程技术网

C# 如何在单独的线程上运行计时器

C# 如何在单独的线程上运行计时器,c#,C#,我需要做一个带有进度条的启动屏幕。我的问题是无法将主窗体与启动屏幕链接: public LogIn_Form() { Thread t = new Thread(new ThreadStart(SplashStart)); t.Start(); Thread.Sleep(5000); InitializeComponent(); t.Abort(); } public void SplashStart() { Application.Run(ne

我需要做一个带有进度条的启动屏幕。我的问题是无法将主窗体与启动屏幕链接:

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

public void SplashStart() {
    Application.Run(new Form1());
}
在“Application.Run(new Form1());”中,它在Form1下给了我一个错误

这是启动屏幕窗体:

public SplashScreen_Form() {
    InitializeComponent();
    timer.Start();
}

private void timer_Tick(object sender, EventArgs e) {
    this.Opacity += 0.07;

    pbrLoad.Increment(1);
    if (pbrLoad.Value == 100) 
        timer.Stop();
}

private void SplashScreen_Form_Load(object sender, EventArgs e) {
    this.Opacity = 0;
    timer.Enabled = true;
}

现在我需要保持这样,但没有错误。

您遇到了什么错误?使用
Thread.Abort()
是一件非常糟糕的事情。整个设计非常奇怪,我建议使用一个自定义启动启动屏幕和主窗体,而不是单独启动每个启动屏幕和主窗体,并且根本不创建任何额外的线程。UI存在于一个线程中,您不应该尝试从另一个线程与它交互。您也不应该使用
Thread.Abort()
。您能为我发布一个代码示例吗?