Exemplo n.º 1
0
 protected override void Dispose(bool disposing)
 {
     #region 释放资源
     List <Delegate> listRemove = new List <Delegate>();
     FieldInfo       field      = typeof(SystemEvents).GetField("_handlers",
                                                                BindingFlags.Static | BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.ExactBinding);
     IEnumerable e = field.GetValue(null) as IEnumerable;
     foreach (var m in e)
     {
         IEnumerable list = m.GetType().GetProperty("Value").GetValue(m, null) as IEnumerable;
         foreach (var n in list)
         {
             Delegate del = n.GetType().GetField("_delegate", BindingFlags.Instance | BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.ExactBinding)
                            .GetValue(n) as Delegate;
             if (del.Target is DevComponents.DotNetBar.Bar)
             {
                 DevComponents.DotNetBar.Bar bar = del.Target as DevComponents.DotNetBar.Bar;
                 if (bar.FindForm() == null)
                 {
                     listRemove.Add(del);
                 }
                 else if (bar.FindForm().GetType().Equals(this.GetType()))
                 {
                     listRemove.Add(del);
                 }
             }
         }
     }
     MethodInfo method = typeof(SystemEvents).GetMethod("RemoveEventHandler",
                                                        BindingFlags.Static | BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.ExactBinding);
     MethodInfo method2 = typeof(DevComponents.DotNetBar.DotNetBarManager).Assembly
                          .GetType("DevComponents.DotNetBar.MessageHandler")
                          .GetMethod("UnregisterMessageClient",
                                     BindingFlags.Static | BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.ExactBinding);
     foreach (var v in listRemove)
     {
         method.Invoke(null, new object[] {
             typeof(SystemEvents).GetField("OnUserPreferenceChangedEvent",
                                           BindingFlags.Static | BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.ExactBinding)
             .GetValue(null), v
         });
         method2.Invoke(null, new object[] { v.Target });
     }
     this.Designer.Report.Designer = null;
     #endregion
     base.Dispose(disposing);
 }