Clean up event handler leaks
- Issue MatterHackers/MCCentral#5573 Investigate allocations on large GCode load and failure to release
This commit is contained in:
parent
f678cd688b
commit
c8510bdd6d
3 changed files with 41 additions and 13 deletions
|
|
@ -545,15 +545,23 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
MinimumSize = new Vector2(120, theme.TabButtonHeight)
|
||||
};
|
||||
|
||||
printerTab.CloseClicked += (s, e) =>
|
||||
void Tab_CloseClicked(object sender, EventArgs args)
|
||||
{
|
||||
ApplicationController.Instance.ClosePrinter(printer);
|
||||
};
|
||||
}
|
||||
|
||||
void Widget_Closed(object sender, EventArgs args)
|
||||
{
|
||||
// Unregister listeners
|
||||
printerTab.CloseClicked -= Tab_CloseClicked;
|
||||
printerTab.Closed -= Widget_Closed;
|
||||
printer.Settings.SettingChanged -= Printer_SettingChanged;
|
||||
}
|
||||
|
||||
// Register listeners
|
||||
printer.Settings.SettingChanged += Printer_SettingChanged;
|
||||
|
||||
// Unregister listener on Tab close
|
||||
printerTab.Closed += (s, e) => printer.Settings.SettingChanged -= Printer_SettingChanged;
|
||||
printerTab.CloseClicked += Tab_CloseClicked;
|
||||
printerTab.Closed += Widget_Closed;
|
||||
|
||||
// Add printer tab
|
||||
tabControl.AddTab(printerTab);
|
||||
|
|
@ -609,10 +617,19 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
tabControl.AddTab(partTab);
|
||||
|
||||
partTab.CloseClicked += (s, e) =>
|
||||
void Tab_CloseClicked(object sender, EventArgs args)
|
||||
{
|
||||
ApplicationController.Instance.Workspaces.Remove(workspace);
|
||||
};
|
||||
}
|
||||
|
||||
void Widget_Closed(object sender, EventArgs args)
|
||||
{
|
||||
partTab.CloseClicked -= Tab_CloseClicked;
|
||||
partTab.Closed -= Widget_Closed;
|
||||
}
|
||||
|
||||
partTab.CloseClicked += Tab_CloseClicked;
|
||||
partTab.Closed += Widget_Closed;
|
||||
|
||||
return partTab;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ of the authors and should not be interpreted as representing official policies,
|
|||
either expressed or implied, of the FreeBSD Project.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MatterHackers.Agg;
|
||||
|
|
@ -67,14 +68,23 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
};
|
||||
this.AddChild(pendingTasksList);
|
||||
|
||||
var tasks = ApplicationController.Instance.Tasks;
|
||||
// Register listeners
|
||||
ApplicationController.Instance.Tasks.TasksChanged += this.Tasks_TasksChanged;
|
||||
|
||||
tasks.TasksChanged += (s, e) =>
|
||||
{
|
||||
RenderRunningTasks(theme, tasks);
|
||||
};
|
||||
this.RenderRunningTasks(theme, ApplicationController.Instance.Tasks);
|
||||
}
|
||||
|
||||
RenderRunningTasks(theme, tasks);
|
||||
private void Tasks_TasksChanged(object sender, EventArgs e)
|
||||
{
|
||||
this.RenderRunningTasks(theme, ApplicationController.Instance.Tasks);
|
||||
}
|
||||
|
||||
public override void OnClosed(EventArgs e)
|
||||
{
|
||||
// Unregister listeners
|
||||
ApplicationController.Instance.Tasks.TasksChanged -= this.Tasks_TasksChanged;
|
||||
|
||||
base.OnClosed(e);
|
||||
}
|
||||
|
||||
private void RenderRunningTasks(ThemeConfig theme, RunningTasksConfig tasks)
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
private readonly List<IDrawable> drawables = new List<IDrawable>();
|
||||
private readonly List<IDrawableItem> itemDrawables = new List<IDrawableItem>();
|
||||
|
||||
private bool emulatorHooked;
|
||||
private long lastEmulatorDrawMs;
|
||||
private readonly Mesh emulatorNozzleMesh = PlatonicSolids.CreateCube(1, 1, 10);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue