Я создаю пункты меню в отдельном потоке и добавляю их в меню, созданное в основном потоке. Я использую Invoke для этого. Получение исключения «Значение не попадает в ожидаемый диапазон».
//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);
Есть предложения?
ОБНОВЛЕНИЕ: я тоже пробовал с Invoke - тот же результат.
menuItemRecent создается как часть процедуры инициализации формы. Поток запускается при активированном событии формы