private void FirePropertyChange(ConfigUpdateEventArgs e)
 {
     if (WriteTempFile != null)
     {
         WriteTempFile(e);
     }
     if (ChangeEvents != null)
     {
         ChangeEvents(e);
     }
 }
 private bool VetoPropertyChange(ConfigUpdateEventArgs e)
 {
     if (ListenerEvent == null)
     {
         return true;
     }
     foreach (Func<ConfigUpdateEventArgs, bool> v in ListenerEvent.GetInvocationList())
     {               
         if (!v(e))
         {
             return false;
         }
     }
     return true;
 }
 public int Set(string propertyName, object val)
 {
     PropertyName property = GetPropertyName(propertyName);
     if (property != null && property.CanWrite)
     {
         var oldVal = Get(propertyName);
         object convertObj = null;
         try
         {
             convertObj = property.PropertyType == null ? val : Convert.ChangeType(val, property.PropertyType);
         }
         catch
         {
             return 4;
         }
         var pce = new ConfigUpdateEventArgs() { Key = propertyName, OldValue = oldVal, NewValue = convertObj };
         if (VetoPropertyChange(pce))
         {
             FirePropertyChange(pce);
             SetValue(propertyName, convertObj);
             UpdateLogDic[propertyName] = oldVal;
             return 1;
         }
         return 2;
     }
     return 3;
 }