private void AsyncCallBack(IAsyncResult rs) { IAsyncBehavior b = (IAsyncBehavior)rs.AsyncState; var d = b.EndDoAction(rs); Logger.Instance.WriteInfoLog(String.Format("异步执行动作 {0} 的结果: {1}", b, d.ToString())); }
/// <summary> /// 初始化监听器 /// </summary> public void Initialize() { watcher = new FileSystemSafeWatcher(DirectoryToMonitor); watcher.NotifyFilter = NotifyFilters.LastWrite; watcher.IncludeSubdirectories = !CurrentLevelOnly; watcher.Changed += (sender, e) => { Logger.Instance.WriteInfoLog(String.Format("检测到文件夹修改. Type = {0}, Dir = {1}, FullPath = {2}", e.ChangeType.ToString(), DirectoryToMonitor, e.FullPath)); for (byte i = 0; i < Behaviors.Length; i++) { var behavior = Behaviors[i]; if (!behavior.Enable) { continue; } Dictionary <String, String> copiedArgCollection = new Dictionary <string, string>(); foreach (var pair in behavior.Parameters) { copiedArgCollection[pair.Key] = behavior.Parameters[pair.Key] .Replace("$TARGET_FILE$", e.FullPath) .Replace("<", "<") .Replace(">", ">") .Replace(""", "\"") .Replace(" ", " "); } try { if (behavior.IsAsync) { IAsyncBehavior s = (IAsyncBehavior)behavior.Behavior; s.BeginDoAction(DirectoryToMonitor, copiedArgCollection, e, AsyncCallBack); Logger.Instance.WriteInfoLog(String.Format("异步执行 {0}", behavior.Behavior)); } else { var rs = behavior.Behavior.DoAction(DirectoryToMonitor, copiedArgCollection, e); Logger.Instance.WriteInfoLog(String.Format("执行动作 {0} 的结果: {1}", behavior.Behavior, rs.ToString())); } } catch (Exception ex) { Logger.Instance.WriteErrorLog(String.Format("执行针对 {0} 的 {1} 执行响应动作 {2} 时发生错误: {3}.\n调用堆栈:\n{4}", DirectoryToMonitor, e.ChangeType.ToString(), behavior.Behavior, ex.Message, ex.StackTrace)); continue; } } }; watcher.EnableRaisingEvents = true; }