private void treeView_AfterCheck(object sender, TreeViewEventArgs e) { if (_filter == null) { return; } lock (_filter) { if (e.Node.Tag is Assembly) { Assembly assembly = (Assembly)e.Node.Tag; if (_filter.GetAssemblyInfo(assembly).Enabled != e.Node.Checked) {// Protect when SetNodeToAssembly is called. _filter.GetAssemblyInfo(assembly).Enabled = e.Node.Checked; } } else if (e.Node.Tag is Type) { Type type = (Type)e.Node.Tag; if (_filter.GetAssemblyInfo(type.Assembly).Types[type] != e.Node.Checked) {// Protect when SetNodeToType is called. _filter.GetAssemblyInfo(type.Assembly).Types[type] = e.Node.Checked; } } else { SystemMonitor.Throw("Unhandled type."); } } }