D'attente pour qu'un objet soit instancié en utilisant les attendent et de la Tâche

Je suis en train d'ajouter un élément et une liste de points d'une des formes de Windows Menu Contextuel. L'objet que je doit utiliser est appelé NTMenuItem. La sortie du code ci-dessous pour imprimer le "Principal élément..." la ligne deux fois, la première fois que le clic Droit menu contextuel s'ouvre. Puis la deuxième fois que le menu contextuel s'ouvre, la rubrique "Ajout d'éléments de sous-menu..." ligne permettra d'imprimer un nombre de fois correctement avec l'incrémentation de l'index, comme souhaité.

#region Context Menu Opening Event Handler
private async void ChartControl_ContextMenuOpening(object sender, ContextMenuEventArgs e) {
    NTMenuItem ztHolderitem     = null;
    await CreateZTMenuItem();

    for ( int j = 0 ;  j < 2 ; j++ ) {
        Print("Main item adding - ztHolderitem was null, building ZT Holder Menu item");
        cc.ContextMenu.Items.Insert(2, BuildZTHolderMenuItem());
    }
    if (ztHolderitem != null) {
        InsertZoneTypeSubMenuItems( ref ztHolderitem );
    }
}
#endregion

#region CreateZTMenuItem()
private async Task CreateZTMenuItem( ) {
    NTMenuItem ztHolderitem = cc.ContextMenu.Items.OfType<NTMenuItem>().FirstOrDefault((i)  => i.Header == Constants.ZTHolder_HeaderLabel);
}
#endregion

#region InsertZoneTypeSubMenuItems()
private void InsertZoneTypeSubMenuItems ( ref NTMenuItem ztHolderitem ) {

    int      types      = Enum.GetNames(typeof(ZoneType)).Length;
    int      t      = 0;

    for (int zt = 0; zt <= types - 1; zt++)
    {
        Print("             Adding submenu items  zt = " + zt );

        string  ztype = ((ZoneType)zt).ToString();

        NTMenuItem tempitem = ztHolderitem.Items.OfType<NTMenuItem>().FirstOrDefault((i) => 
        if (tempitem == null && ztHolderitem.Items.Count < types) {
            ztHolderitem.Items.Insert(t, BuildZTSubMenuItem(ztype));
            t++;
        }
    }
}

Il semble que je ne peut pas simplement et de manière fiable à faire:

NTMenuItem ztHolderitem = cc.ContextMenu.Items.OfType<NTMenuItem>().FirstOrDefault((i)  => i.Header == Constants.ZTHolder_HeaderLabel);

et puis de vérifier pour un non nulle en raison de la cohérence de l'impression de le "Principal élément..." ligne deux fois. (infini boucle d'impression si je n'ai pas la boucle de comptage jusqu'à 2 fois).

J'ai un poulet / oeuf question. Je ne peux pas ajouter des sous éléments de menu dans le menu, à moins que le principal NTMenuItem est instancié. J'ai essayé de faire un

while ( ztHolderitem != null ) {
   Print("Main item adding - ztHolderitem was null, building ZT Holder Menu item");
   cc.ContextMenu.Items.Insert(2, BuildZTHolderMenuItem());
}

Et ce qui se passe dans une boucle sans fin de l'impression du "Principal élément..." de ligne. Et je ne pas attendre, la tâche de l'instanciation de la NTMenuItem, donc je ne suis jamais dans un état où je sais que je peux commencer à ajouter des éléments de sous-menu.

Comment puis-je instancier un NTMenuItem, vérifiez qu'il n'est pas null, et puis commencer à ajouter le sous-menu articles sans avoir à ouvrir manuellement le menu Contextuel avec 2 consécutifs droit de clics?

0
2019-09-19 05:02:43
source
0 réponses

Voir d'autres questions sur les étiquettes