Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/21/18 17:09:39 (5 years ago)
Author:
jkarder
Message:

#2839: worked on hive project management

  • improved event handler (de-)registration
  • refactored content updates
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs

    r16430 r16446  
    5656
    5757    private readonly object locker = new object();
     58    private bool refreshingInternal = false;
     59    private bool refreshingExternal = false;
    5860
    5961    public new IItemList<Project> Content {
     
    7072      HiveAdminClient.Instance.Refreshing += HiveAdminClient_Instance_Refreshing;
    7173      HiveAdminClient.Instance.Refreshed += HiveAdminClient_Instance_Refreshed;
    72       AccessClient.Instance.Refreshing += AccessClient_Instance_Refreshing;
    73       AccessClient.Instance.Refreshed += AccessClient_Instance_Refreshed;
    7474    }
    7575
    7676    #region Overrides
    77     protected override void OnClosing(FormClosingEventArgs e) {
    78       AccessClient.Instance.Refreshed -= AccessClient_Instance_Refreshed;
    79       AccessClient.Instance.Refreshing -= AccessClient_Instance_Refreshing;
    80       HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
    81       HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
    82       base.OnClosing(e);
    83     }
    84 
    8577    protected override void RegisterContentEvents() {
    8678      base.RegisterContentEvents();
     
    183175      if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveAdminClient_Instance_Refreshing, sender, e);
    184176      else {
     177        lock (locker) {
     178          if (refreshingExternal) return;
     179          if (!refreshingInternal) refreshingExternal = true;
     180        }
     181
    185182        Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate);
    186183        SetEnabledStateOfControls();
     
    191188      if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveAdminClient_Instance_Refreshed, sender, e);
    192189      else {
    193         Progress.Hide(this);
    194         SetEnabledStateOfControls();
    195       }
    196     }
    197 
    198     private void AccessClient_Instance_Refreshing(object sender, EventArgs e) {
    199       if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshing, sender, e);
    200       else {
    201         Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate);
    202         SetEnabledStateOfControls();
    203       }
    204     }
    205 
    206     private void AccessClient_Instance_Refreshed(object sender, EventArgs e) {
    207       if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshed, sender, e);
    208       else {
     190        if (refreshingExternal) refreshingExternal = false;
     191        Content = HiveAdminClient.Instance.Projects;
     192
    209193        Progress.Hide(this);
    210194        SetEnabledStateOfControls();
     
    215199      await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions(
    216200        action: () => UpdateProjects());
     201    }
     202
     203    private void ProjectsView_Disposed(object sender, EventArgs e) {
     204      HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
     205      HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
    217206    }
    218207
     
    515504
    516505    private void UpdateProjects() {
     506      lock (locker) {
     507        if (refreshingInternal || refreshingExternal) return;
     508        refreshingInternal = true;
     509      }
     510
    517511      try {
    518512        HiveAdminClient.Instance.Refresh();
    519         Content = HiveAdminClient.Instance.Projects;
    520513      } catch (AnonymousUserException) {
    521514        ShowHiveInformationDialog();
     515      } finally {
     516        refreshingInternal = false;
    522517      }
    523518    }
Note: See TracChangeset for help on using the changeset viewer.