Thread nicht auf GUI-Thread starten

06/22/2016 21:55 Ludder231#1
Hi,

habe bis jetzt immer meine Threads im GUI Thread gestartet. Also zb unter einem Button Klick event. Nun führt das jetzt zu einem einfrieren der GUI :D

Wie starte ich denn den thread nicht auf dem GUI Thread?

Hoffe das war verständlich genug :)
06/22/2016 23:09 YatoDev#2
@[Only registered and activated users can see links. Click Here To Register...]

es gibt nur einen gui thread. Es kann aber passieren das ein System.Threading.Task mal auf dem gui thread ausgeführt wird. Um das zu vermeiden:

Code:
ThreadStart ts = new ThreadStart(function);
Thread t = new Thread(ts);
t.IsBackground = true;
t.Start();
Asynchrone programmierung für kleinere aufgaben funktioniert so:
Code:
Task.Run(() =>
//DeinCode
));
Normalerweise wird auch das in einem extra thread ausgeführt:
Code:
Task t = new Task(new Action(function));
t.Start();
Beim funktionsparameter die () weglassen nicht vergessen.
Eine funktion mit parametern zu starten funktioniert ähnlich
06/23/2016 11:44 Ludder231#3
Quote:
Originally Posted by »FlutterShy™ View Post
@[Only registered and activated users can see links. Click Here To Register...]

es gibt nur einen gui thread. Es kann aber passieren das ein System.Threading.Task mal auf dem gui thread ausgeführt wird. Um das zu vermeiden:

Code:
ThreadStart ts = new ThreadStart(function);
Thread t = new Thread(ts);
t.IsBackground = true;
t.Start();
Asynchrone programmierung für kleinere aufgaben funktioniert so:
Code:
Task.Run(() =>
//DeinCode
));
Normalerweise wird auch das in einem extra thread ausgeführt:
Code:
Task t = new Task(new Action(function));
t.Start();
Beim funktionsparameter die () weglassen nicht vergessen.
Eine funktion mit parametern zu starten funktioniert ähnlich
Danke schonmal. Aber wo muss ich den Thread initialisieren etc. weil wenn ich den unter dem Button_Klick event starte ist der doch aufm GUI thread oder nciht? Oder bin ich da jetzt aufm falschen weg
06/23/2016 12:14 YatoDev#4
Ne. Wenn du den thread so startest wie aus Beispiel 1 und 3 dann kehrt der nach dem start des Threads sofort zurück und wartet nicht darauf das er beendet ist.
Du musst aber auch beachten das du wenn du vom thread auf die gui zugreifen willst das du das control invoken musst.
06/23/2016 13:39 Ludder231#5
Quote:
Originally Posted by »FlutterShy™ View Post
Ne. Wenn du den thread so startest wie aus Beispiel 1 und 3 dann kehrt der nach dem start des Threads sofort zurück und wartet nicht darauf das er beendet ist.
Du musst aber auch beachten das du wenn du vom thread auf die gui zugreifen willst das du das control invoken musst.
Okay danke. Ja das mit den invoken kenn ich bereits :D