mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 22:11:48 +08:00
fixed several event handle leaks #1173
This commit is contained in:
@@ -1,16 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using BrightIdeasSoftware;
|
||||
using BrightIdeasSoftware;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.Config.Putty;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
// ReSharper disable ArrangeAccessorOwnerBody
|
||||
|
||||
namespace mRemoteNG.UI.Controls
|
||||
@@ -43,8 +43,12 @@ namespace mRemoteNG.UI.Controls
|
||||
get { return _connectionTreeModel; }
|
||||
set
|
||||
{
|
||||
if (_connectionTreeModel == value)
|
||||
return;
|
||||
|
||||
UnregisterModelUpdateHandlers(_connectionTreeModel);
|
||||
_connectionTreeModel = value;
|
||||
PopulateTreeView();
|
||||
PopulateTreeView(value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,28 +160,31 @@ namespace mRemoteNG.UI.Controls
|
||||
padding;
|
||||
}
|
||||
|
||||
private void PopulateTreeView()
|
||||
private void PopulateTreeView(ConnectionTreeModel newModel)
|
||||
{
|
||||
UnregisterModelUpdateHandlers();
|
||||
SetObjects(ConnectionTreeModel.RootNodes);
|
||||
RegisterModelUpdateHandlers();
|
||||
NodeSearcher = new NodeSearcher(ConnectionTreeModel);
|
||||
SetObjects(newModel.RootNodes);
|
||||
RegisterModelUpdateHandlers(newModel);
|
||||
NodeSearcher = new NodeSearcher(newModel);
|
||||
ExecutePostSetupActions();
|
||||
AutoResizeColumn(Columns[0]);
|
||||
}
|
||||
|
||||
private void RegisterModelUpdateHandlers()
|
||||
private void RegisterModelUpdateHandlers(ConnectionTreeModel newModel)
|
||||
{
|
||||
_puttySessionsManager.PuttySessionsCollectionChanged += OnPuttySessionsCollectionChanged;
|
||||
ConnectionTreeModel.CollectionChanged += HandleCollectionChanged;
|
||||
ConnectionTreeModel.PropertyChanged += HandleCollectionPropertyChanged;
|
||||
newModel.CollectionChanged += HandleCollectionChanged;
|
||||
newModel.PropertyChanged += HandleCollectionPropertyChanged;
|
||||
}
|
||||
|
||||
private void UnregisterModelUpdateHandlers()
|
||||
private void UnregisterModelUpdateHandlers(ConnectionTreeModel oldConnectionTreeModel)
|
||||
{
|
||||
_puttySessionsManager.PuttySessionsCollectionChanged -= OnPuttySessionsCollectionChanged;
|
||||
ConnectionTreeModel.CollectionChanged -= HandleCollectionChanged;
|
||||
ConnectionTreeModel.PropertyChanged -= HandleCollectionPropertyChanged;
|
||||
|
||||
if (oldConnectionTreeModel == null)
|
||||
return;
|
||||
|
||||
oldConnectionTreeModel.CollectionChanged -= HandleCollectionChanged;
|
||||
oldConnectionTreeModel.PropertyChanged -= HandleCollectionPropertyChanged;
|
||||
}
|
||||
|
||||
private void OnPuttySessionsCollectionChanged(object sender, NotifyCollectionChangedEventArgs args)
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.Config.Connections;
|
||||
using mRemoteNG.Connection;
|
||||
@@ -11,6 +5,12 @@ using mRemoteNG.Themes;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
using mRemoteNG.UI.Controls;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using WeifenLuo.WinFormsUI.Docking;
|
||||
// ReSharper disable ArrangeAccessorOwnerBody
|
||||
|
||||
@@ -50,8 +50,6 @@ namespace mRemoteNG.UI.Window
|
||||
ConnectionTree.UseFiltering = Settings.Default.UseFilterSearch;
|
||||
ApplyFiltering();
|
||||
}
|
||||
|
||||
SetConnectionTreeEventHandlers();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user