/// <summary> /// Запускает проверку источника данных в отдельном потоке. /// </summary> /// <param name="dataSource">Проверяемый источник данных</param> public void CheckDataSource(MetaObjectApp.DataSource dataSource) { //Делаем асинхронный делегат, который запускает проверку источника IDatasourceMonitor dsm = monitorList.Find((e) => { return(e.DataSourceName == dataSource.DataSourceName); }); if (dsm == null) { return; } AcyncDelegate d = new AcyncDelegate(() => { string newControlSum = dsm.controlSum(); if (newControlSum != dataSource.ControlSum) //контрольная сумма изменилась { //сохраняем новую контрольную сумму dataSource.ControlSum = newControlSum; _repository.Save(dataSource); //создаем новый метаобъект "событие" DataSourceEvent newEvent = (DataSourceEvent)_repository.CreateNewMetaObject(MetaObjectType.DataSourceEvent, ""); newEvent.EventType = "DSchanged"; newEvent.SetDataSource(dataSource); _repository.Save(newEvent); //добавляем этот метаобъект в метаобъект "события" DataSourceEvents events = _repository.LoadMetaObject("DataSourceEvents") as DataSourceEvents; events.AddDataSourceEvent(newEvent); _repository.Save(events); Raise_DS_Changed(newEvent); } }); d.BeginInvoke(null, null); }
/// <summary> /// Загружает плагины из папки плагинов. /// </summary> public void LoadPlugins() { monitorList.Clear(); // папка с плагинами string folder = System.AppDomain.CurrentDomain.BaseDirectory + PluginsDirPath; // dll-файлы в этой папке string[] files = Directory.GetFiles(folder, "*.dll"); foreach (string file in files) { try { Assembly assembly = Assembly.LoadFile(file); foreach (Type type in assembly.GetTypes()) { Type iface = type.GetInterface("IDatasourceMonitor"); if (iface != null) { IDatasourceMonitor plugin = (IDatasourceMonitor)Activator.CreateInstance(type); monitorList.Add(plugin); } } } catch (Exception ex) { throw new Exception("Ошибка загрузки плагина\n" + ex.Message); } } }