Halfbax
Erfahrenes Mitglied
Guten Abend,
seitdem ich einen Speicherleak behoben habe. Steht die Funktionalität meines Programms auf der Kippe. Ich bin gerade dabei einen Mandelbrot Generator zu erstellen und nutze dafür Threads.
Das Problem tritt nun auf, wenn das MouseMove Event getriggert wird, denn dann wird der jeweilige Thread mehrmals aufgerufen, wobei der alte Thread noch nicht beendet ist. Selbst ein Thread.Abort() hilft mir nicht. Desweiteren wird mein Viereck nicht mehr richtig gezeichnet.
FractalWindow.cs
Ich habe bereits versucht das Objekt zu locken, aber vergeblich.
Vielleicht könnt Ihr mir ja helfen.
LG
Leon
seitdem ich einen Speicherleak behoben habe. Steht die Funktionalität meines Programms auf der Kippe. Ich bin gerade dabei einen Mandelbrot Generator zu erstellen und nutze dafür Threads.
Das Problem tritt nun auf, wenn das MouseMove Event getriggert wird, denn dann wird der jeweilige Thread mehrmals aufgerufen, wobei der alte Thread noch nicht beendet ist. Selbst ein Thread.Abort() hilft mir nicht. Desweiteren wird mein Viereck nicht mehr richtig gezeichnet.
System.InvalidOperationException: "Das Objekt wird bereits an anderer Stelle verwendet."
FractalWindow.cs
C#:
private void imagePanel_MouseMove(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
renderThread.Abort();
renderThread = new Thread(delegate () {
fractalHandler.RenderMouseEvent(new Point(e.X, e.Y), pStart);
});
renderThread.Start();
imagePanel.BackgroundImage = (Image) fractalHandler.getDataSource();
}
}
C#:
public void RenderMouseEvent(Point e, Point pStart)
{
if (datasource != null)
{
datasource = Fractal.generateRectangleOnBitmap(datasource, panelWidth, panelHeight, e, pStart);
}
}
C#:
public static Bitmap generateRectangleOnBitmap(Bitmap datasource, int panelWidth, int panelHeight, Point e, Point pStart)
{
Point temp = new Point(e.X, pStart.Y + ((int)(((panelHeight - 28) / (panelHeight * 1.0)) * (e.X - pStart.X))));
Rectangle rect = Rectangle.FromLTRB(pStart.X, pStart.Y, temp.X, temp.Y);
Bitmap bitmap = new Bitmap(panelWidth, panelHeight);
Graphics g = Graphics.FromImage((Image) bitmap);
g.DrawImage((Image) datasource, 0, 0); // FEHLER
g.DrawRectangle(new Pen(Brushes.Red, 3), rect);
return bitmap;
}
Ich habe bereits versucht das Objekt zu locken, aber vergeblich.
Vielleicht könnt Ihr mir ja helfen.
LG
Leon