有时程序会一直在计算“某事”(?)并且GUI被阻止。但大部分时间都是有效的。我不明白为什么。
代码:
private void button1_Click(object sender, EventArgs e)
{
new Thread (Taskstuff).Start ();
}
private void Taskstuff()
{
Parallel.ForEach(Pfade, element =>
{
DoStuff(element);
});
}
private void DoStuff(string path)
{
IEImage Bild = new IEImage(path);
string name;
name = Path.GetFileName(path);
Organizer(Bild);
}
private void Organizer(IEImage Bild)
{
Bild.ConvertToGray();
Bild.EdgeDetect_Sobel();
Bitmap VorverarbeitetBitmap = Bild.CreateBitmap();
//Array für Cluster
List<Point> points = BildArray(VorverarbeitetBitmap);
List<Point> Rand = new List<Point>();
//Clusteraufruf
if (checkBox1.Checked)
{
List<List<Point>> Clusterkopie = DBSCAN.Cluster(points);
Rand= DBRAND(Clusterkopie[größteclusternummer]);
}
//Nur Randaufruf, wenn keine Clusterrechnung notwendig
else
{
Rand=DBRAND(points);
}
//Feststellung der Neigung
bool neigung = Neigung(Rand);
//Sortieren nach Kreiskoordinaten
List<Point> sortierung = Sortierung(Rand);
//Bestimmung des Eckpunktes
Point ecke = Ecke(sortierung,neigung);
//Berechnung der Gerade mit den meisten Treffern
List<Point> Bresenergebnis = Geraden(ecke, neigung, sortierung);
//Messung Distanz Ecke <-> Kurve in Pixeln
double distanz = Distanz(Bresenergebnis, ecke, neigung);
//do more stuff
}
目前代码中没有GUI访问权限。所有结果都只是变量。 我不明白为什么GUI不总是被阻止或总是工作。我不会在尝试之间改变任何东西。 :| 也许有时新线程与旧的“GUI线程”相同?