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/ResourcesView.cs

    r16430 r16446  
    5454
    5555
    56 
    5756    private TreeNode ungroupedGroupNode;
    5857
     
    6463
    6564    private readonly object locker = new object();
     65    private bool refreshingInternal = false;
     66    private bool refreshingExternal = false;
    6667
    6768    public new IItemList<Resource> Content {
     
    7879      HiveAdminClient.Instance.Refreshing += HiveAdminClient_Instance_Refreshing;
    7980      HiveAdminClient.Instance.Refreshed += HiveAdminClient_Instance_Refreshed;
    80       AccessClient.Instance.Refreshing += AccessClient_Instance_Refreshing;
    81       AccessClient.Instance.Refreshed += AccessClient_Instance_Refreshed;
    8281    }
    8382
    8483    #region Overrides
    85     protected override void OnClosing(FormClosingEventArgs e) {
    86       AccessClient.Instance.Refreshed -= AccessClient_Instance_Refreshed;
    87       AccessClient.Instance.Refreshing -= AccessClient_Instance_Refreshing;
    88       HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
    89       HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
    90       base.OnClosing(e);
    91     }
    92 
    9384    protected override void RegisterContentEvents() {
    9485      base.RegisterContentEvents();
     
    185176      if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveAdminClient_Instance_Refreshing, sender, e);
    186177      else {
     178        lock (locker) {
     179          if (refreshingExternal) return;
     180          if (!refreshingInternal) refreshingExternal = true;
     181        }
     182
    187183        Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate);
    188184        SetEnabledStateOfControls();
     
    193189      if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveAdminClient_Instance_Refreshed, sender, e);
    194190      else {
     191        if (refreshingExternal) refreshingExternal = false;
     192        Content = HiveAdminClient.Instance.Resources;
     193
    195194        Progress.Hide(this);
    196195        SetEnabledStateOfControls();
     
    198197    }
    199198
    200     private void AccessClient_Instance_Refreshing(object sender, EventArgs e) {
    201       if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshing, sender, e);
    202       else {
    203         Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate);
    204         SetEnabledStateOfControls();
    205       }
    206     }
    207 
    208     private void AccessClient_Instance_Refreshed(object sender, EventArgs e) {
    209       if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshed, sender, e);
    210       else {
    211         Progress.Hide(this);
    212         SetEnabledStateOfControls();
    213       }
    214     }
    215 
    216199    private async void ResourcesView_Load(object sender, EventArgs e) {
    217       await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions(
    218         action: () => UpdateResources());
     200      await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions(() => UpdateResources());
     201    }
     202
     203    private void ResourcesView_Disposed(object sender, EventArgs e) {
     204      HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
     205      HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
    219206    }
    220207
     
    550537
    551538    private void UpdateResources() {
     539      lock (locker) {
     540        if (refreshingInternal || refreshingExternal) return;
     541        refreshingInternal = true;
     542      }
     543
    552544      try {
    553545        HiveAdminClient.Instance.Refresh();
    554         Content = HiveAdminClient.Instance.Resources;
    555546      } catch (AnonymousUserException) {
    556547        ShowHiveInformationDialog();
     548      } finally {
     549        refreshingInternal = false;
    557550      }
    558551    }
Note: See TracChangeset for help on using the changeset viewer.