private ListViewItem TryFindListViewItemByGitTask(GitTask task) { return(this.ListView_Tasks .InvokeSafe((lv, lvState) => { return CollectionHelper.SingleOrDefault(lv.Items .Cast <ListViewItem>(), lvi => object.Equals(lvi.Tag, lvState.Task)); }, funcState: new { Task = task, })); }
private void ReloadTasks() { this.Button_ReloadConfig .InvokeSafe((btn) => btn.Enabled = false); Task.Factory.StartNew((state) => { var frm = (MainForm)state; try { var config = new IniFileConfigRepository(@"./config.ini"); frm.ListView_Tasks .InvokeSafe((lv, lvState) => { try { lv.Items.Clear(); while (lv.Items.Count > 0) { var t = lv.Items[0].Tag as GitTask; t.Error -= lvState.Form.Task_Error; t.Started -= lvState.Form.Task_Started; t.Stopped -= lvState.Form.Task_Stopped; lv.Items.RemoveAt(0); } lv.Groups.Clear(); foreach (var grpName in GitTask.FromConfig(lvState.Config) .Select(t => t.Group) .Distinct() .OrderBy(gn => gn, StringComparer.CurrentCultureIgnoreCase)) { var lvg = new ListViewGroup(); lvg.Header = string.IsNullOrWhiteSpace(grpName) ? "(no group)" : grpName; lvg.Tag = grpName; lv.Groups.Add(lvg); } foreach (var task in GitTask.FromConfig(lvState.Config) .OrderBy(t => t.DisplayName, StringComparer.CurrentCultureIgnoreCase)) { try { var lvi = new ListViewItem(); lvi.Text = task.DisplayName ?? string.Empty; lvi.Text = task.DisplayName ?? string.Empty; lvi.Tag = task; lvi.Group = CollectionHelper.SingleOrDefault(lv.Groups .Cast <ListViewGroup>(), lvg => object.Equals(lvg.Tag, task.Group)); try { task.Error += lvState.Form.Task_Error; task.Started += lvState.Form.Task_Started; task.Stopped += lvState.Form.Task_Stopped; lv.Items.Add(lvi); lvState.Form.UpdateIcon(lvi); } catch { task.Error -= lvState.Form.Task_Error; task.Started -= lvState.Form.Task_Started; task.Stopped -= lvState.Form.Task_Stopped; throw; } } catch (Exception ex) { lvState.Form.ShowError(ex); } } } catch (Exception ex) { lvState.Form.ShowError(ex); } }, actionState: new { Config = config, Form = frm, }); } catch (Exception ex) { frm.ShowError(ex); } finally { frm.Button_ReloadConfig .InvokeSafe((btn) => btn.Enabled = true); } }, state: this); }