Итак, у меня есть заставку, у которой будет некоторый временной код, и я не хочу, чтобы он работал в основном потоке. Я сделал некоторый код, который должен остановить поток и закрыть форму, но это не сработает. Любая помощь приветствуется.Заставка экрана заставки
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
namespace Cobalt
{
partial class Cobalt : Form
{
public static bool splashCont { get; set; }
public Cobalt()
{
this.Text = "Cobalt V1.0.0";
this.Width = 400;
this.Height = 100;
this.BackgroundImage = Properties.Resources.cobaltlgo;
this.FormBorderStyle = FormBorderStyle.None;
this.TopMost = true;
this.StartPosition = FormStartPosition.CenterScreen;
Thread splash = new Thread(new ThreadStart(splashLoadAction));
splash.Start();
if (splashCont)
{
splash.Abort();
this.Close();
}
}
private void splashLoadAction()
{
Thread.Sleep(5000);
Cobalt.splashCont = true;
}
}
}
Программа просто остается на этом экране: Screen EDIT: я был в состоянии исправить это с помощью следующего кода:
Invoke((MethodInvoker)delegate { MyNextForm.Show(); });
, активизирующим MyNextForm.Show()
в потоке пользовательского интерфейса.
Что означает «не работает»? – Enigmativity
Кроме того, если вы когда-либо называете 'Thread.Abort()', то вы делаете что-то ** очень неправильно **, если только вы не пытаетесь принудительно закрыть все ваше приложение. – Enigmativity