Je crée des éléments de menu dans un fil distinct et les ajoute au menu créé dans le fil principal. J'utilise Invoke pour ça. Obtenir l'exception "La valeur ne correspond pas à la fourchette attendue".Ajout d'éléments de menu à partir d'un fil distinct
//creating new thread
Thread thread = new Thread(LoadRecentTasks);
thread.IsBackground = true;
thread.Start();
private void LoadRecentTasks()
{
EntryCollection recentEntries = Entry.GetRecentEntries(10);
foreach (Entry entry in recentEntries)
{
MenuItemPlus menuItem = new MenuItemPlus();
menuItem.Text = entry.GetShortDescription(28);
menuItem.Click += recentTasksMenuItem_Click;
menuItem.Tag = entry;
AddRecentMenuItem(menuItem);
}
}
private void AddRecentMenuItem(MenuItemPlus menuItem)
{
if (InvokeRequired)
{
BeginInvoke(new CallbackDelegate<MenuItemPlus>(AddRecentMenuItem), menuItem);
}
else
{
menuItemRecent.MenuItems.Add(menuItem); //<-- exception thrown here
}
}
delegate void CallbackDelegate<T>(T t);
Des suggestions? MISE À JOUR: je l'ai essayé avec Invoke aussi - même résultat. MenuItemRecent est créé dans le cadre de la routine d'initialisation du formulaire. Le thread est démarré sur l'événement Activé du formulaire
Quelle ligne de code lève l'exception? –
J'ai supposé celui qu'il a commenté :) Pour une raison quelconque, je pensais que BeginInvoke avait besoin d'un tableau d'arguments au lieu d'un seul objet, mais si c'était le cas, je doute que le code compile même. – SimonJ
@SimonJ. ha ha, suis-je aveugle ou suis-je aveugle? Cela semble tout à fait raisonnable ... –