Zitat von
Khabarakh:
Habe ich irgendwo oben schon zu deinem ersten Thread-Code geschrieben: Du invokst thread1_Event, also wird deine
gesamte Schleife im Hauptthread ausgeführt und dort kann Abort schlecht wirken. Es wird warten, bis thread1_Event beendet ist und erst dann die
Exception werfen.
Oh, dann habe ich ja gar nicht das was ich wollte. Mist. Wie mache ich es denn richtig?
Code:
private void button1_Click(object sender, EventArgs e)
{
if (rbThread.Checked)
{
try
{
t = new Thread(ThreadProc);
t.Name = "Thead";
t.Start();
}
catch
{
}
}
else
{
backgroundWorker1.RunWorkerAsync();
}
}
private void btnStop_Click(object sender, EventArgs e)
{
if (rbThread.Checked)
{
t.Abort();
}
else
{
backgroundWorker1.CancelAsync();
}
}
private void thread1_Event(object sender, EventArgs e)
{
try
{
if (InvokeRequired)
{
Invoke(new EventHandler(thread1_Event));
}
else
{
for (int i = 0; i < 100000; i++)
{
lblStatusText.Text = resManager.GetString("ThreadStatusRunning");
this.Update();
Thread.Sleep(0);
}
}
}
catch (ThreadAbortException tae)
{
lblStatusText.Text = resManager.GetString("ThreadStatusFinish");
this.Update();
}
}
private void ThreadProc()
{
try
{
thread1_Event(this, null);
}
catch (ThreadAbortException tae)
{
lblStatusText.Text = resManager.GetString("ThreadStatusFinish");
this.Update();
}
}