/// <summary> /// Обновляет статус папки ВРаботе. Асинхронно. /// </summary> /// <param name="recursive"></param> public void UpdateStatusBegin(bool recursive, EventHandler LoadComlete = null) { if (TreeView == null) { return; } var updateParams = new WorkFolderUpdateParams { Recursive = recursive, Font = TreeView.Font }; Task.Factory.StartNew(UpdateAsync, updateParams); if (recursive) { for (int i = 0; i < Nodes.Count; i++) { var newNode = Nodes[i] as WorkFolderNode; if (newNode != null) { newNode.UpdateStatusBegin(true); } } } if (LoadComlete != null) { LoadComlete(this, EventArgs.Empty); } }
/// <summary> /// Обновляет статус папки ВРаботе. Асинхронно. /// </summary> /// <param name="updateParams"></param> private void UpdateStatusEnd(WorkFolderUpdateParams updateParams) { NodeFont = updateParams.Font; Text = updateParams.Text; OnUpdateNode(); if (updateParams.ExpandParent) { ExpandParent(updateParams.Recursive); } }
/// <summary> /// Получить данные. Асинхронно. /// </summary> /// <param name="param"></param> private void UpdateAsync(object param) { var updateParams = (WorkFolderUpdateParams)param; try { DataRow dr = Environment.WorkFolderData(ID, Emp.ID); if (dr == null) { return; } var recursive = updateParams.Recursive; var font = updateParams.Font; int count = dr[Environment.FolderData.UnreadField] is int?(int)dr[Environment.FolderData.UnreadField] : 0; int countAll = dr[Environment.FolderData.AllDocsCountField] is int?(int)dr[Environment.FolderData.AllDocsCountField] : 0; string txt = dr[Environment.FolderData.NameField] as string ?? name; var result = new WorkFolderUpdateParams(); if (count > 0) { result.Font = updateParams.Font; result.Text = string.Concat(txt, " (", count.ToString(), "/", countAll.ToString(), ")"); result.ExpandParent = true; result.Recursive = recursive; } else { result.Font = new Font(font, FontStyle.Regular); result.Text = string.Concat(txt, " (", countAll.ToString(), ")"); } this.UiThreadBeginInvoke(() => { UpdateStatusEnd(result); }); } catch (Exception ex) { Lib.Win.Data.Env.WriteToLog(ex); } }