Ich habe Probleme, meine GUI zu erscheinen und nicht einzufrieren, während ich einen externen Prozess (und warten auf) läuft. In diesem Fall ist drivers.exe ein sehr einfaches Programm, bei dem der Benutzer einfach auf "OK" klickt. Wenn ich auf OK klicke, wird es beendet. Ich versuche, meinen Status Strip Count Zahlen einfach (sehr schnell) zu machen, während drivers.exe ausgeführt wird. In der Praxis erscheint meine GUI jedoch nie, bis drivers.exe beendet wird.Ausführen eines anderen Prozesses ohne GUI-Einfrieren
private void run_drivers()
{
Console.WriteLine("Start Driver");
int driver_timeout_in_minutes = 20;
System.Diagnostics.Process driverproc = System.Diagnostics.Process.Start(Application.StartupPath + "\\" + "drivers.exe");
driverproc.WaitForExit(driver_timeout_in_minutes * 1000 * 60); //uses milliseconds, we must convert
}
private void Form1_Load(object sender, EventArgs e)
{
ThreadStart worker = new ThreadStart(run_drivers);
Console.WriteLine("Main - Creating worker thread");
toolStripStatusLabel1.Text = "hi";
Thread t = new Thread(worker);
t.IsBackground = true;
t.Start();
Console.WriteLine("Main - Have requested the start of worker thread");
int i = 0;
while (t.IsAlive)
{
i++;
toolStripStatusLabel1.Text = i.ToString();
}
Console.WriteLine("Dead");
}
Könnten Sie bitte zeigen Sie mir, wie? Ich habe es versucht, und es hat wirklich nicht funktioniert. Meine Form würde immer noch nicht zeigen ... überhaupt. – Adam
Das Problem ist die Schleife "while (t.IsAlive)". Er muss das aus dem UI-Thread entfernen, unabhängig davon, ob er BackgroundWorker verwendet oder nicht. – Phil