otrzymują klasę niżej, aby uruchomić ekran powitalny na alternatywnym wątku:TPL Odpowiednik klasy Thread „Splash-type” ekran
public partial class SplashForm : Form
{
private static Thread _splashThread;
private static SplashForm _splashForm;
public SplashForm()
{
InitializeComponent();
}
// Show the Splash Screen (Loading...)
public static void ShowSplash()
{
if (_splashThread == null)
{
// Show the form in a new thread.
_splashThread = new Thread(new ThreadStart(DoShowSplash));
_splashThread.IsBackground = true;
_splashThread.Start();
}
}
// Called by the thread.
private static void DoShowSplash()
{
if (_splashForm == null)
_splashForm = new SplashForm();
// Create a new message pump on this thread (started from ShowSplash).
Application.Run(_splashForm);
}
// Close the splash (Loading...) screen.
public static void CloseSplash()
{
// Need to call on the thread that launched this splash.
if (_splashForm.InvokeRequired)
_splashForm.Invoke(new MethodInvoker(CloseSplash));
else
Application.ExitThread();
}
}
To się nazywa i zamknięte z następujących odpowiednich poleceń
SplashForm.ShowSplash();
SplashForm.CloseSplash();
Dobrze.
nie jestem dokładnie nowy w OC, oczywiście możemy pokazać postać w innym wątku, używając coś tak prostego jak:
Task task = Task.Factory.StartNew(() =>
{
SomeForm someForm = new SomeForm();
someForm.ShowDialog();
};
Mój problem jest zamknięcie tej SomeForm
dół, gdy jesteś gotowy. Musi być lepszy sposób niż tworzenie metodę public static
w klasie SomeForm
jak
private static SomeForm _someForm;
public static void CloseSomeForm()
{
if (_someForm.InvokeRequired)
_someForm.Invoke(new MethodInvoker(CloseSomeForm));
}
moje pytanie, co jest najlepszym sposobem, aby zrobić to samo, co pokazano za pomocą klasy SplashForm powyżej za pomocą zadania Parrallel Library (TPL)? W szczególności najlepszy sposób zamknięcia formularza wywoływanego w innym wątku z interfejsu użytkownika.
Jaki jest celem jest umieszczenie ekranu powitalnego na innym wątku? –
Aby było aktywne (wyświetlaj animacje itp.). Nie blokuj interfejsu użytkownika. – MoonKnight