Продолжайте получать «Операция с перекрестными потоками недопустима» при попытке показать меню уведомлений - PullRequest
1 голос
/ 05 декабря 2010

Это не обычная BS 'Corss-Thread opeartion', поэтому не публикуйте очевидные решения, пожалуйста.

Это то, что меня бесит уже несколько дней.

У меня есть NotifyIcon, с привязкой ContextMenuStrip.Все работает как надо, но иногда (и я не могу вспомнить точные шаги, чтобы воспроизвести это) я получаю исключение между потоками.Весь мой доступ к ContextMenuStrip / NotifyIcon дополняется Invoke cr * p, но все же, когда пользователь щелкает правой кнопкой мыши значок уведомления, возникает исключение.

Это полноеданные из исключения:

Message: операция с несколькими потоками недопустима: доступ к элементу управления '' осуществляется из потока, отличного от потока, в котором он был создан.

Call stack:

в System.Windows.Forms.Control.get_Handle ()

в System.Windows.Forms.Control.SetBoundsCore (Int32 x, Int32 y, ширина Int32, высота Int32, указан BoundsSpecified)

в System.Windows.Forms.ToolStrip.SetBoundsCore (Int32 x, Int32 y, Int32 ширина, Int32 высота, указано BoundsSpecified)

в System.Windows.Forms.ToolStripDropDown.SetBoundsCore (Int32 x, Int32 y, ширина Int32, высота Int32, указано BoundsSpecified)

в System.Windows.Forms.Control.SetBounds (Int32 x, Int32 y, ширина Int32, высота Int32, указано BoundsSpecified)

в System.Windows.Forms.Control.set_Location (значение точки)

в System.Windows.Forms.ToolStripDropDown.Show (Int32 x, Int32 y)

в System.Windows.Forms.ContextMenuStrip.ShowInTaskbar (Int32 x, Int32 y)

в System.Windows.Forms.NotifyIcon.ShowContextMenu ()

в System.Windows.Forms.NotifyIcon.WndProc (Message & msg)

в System.Windows.Forms.NotifyIcon.NotifyIconNativeWindow.WndProc (Message & m)

в System.Windows.Forms.NativeWindow.DebuggableCallback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

в системе.Forms.UnsafeNativeMethods.PeekMessage (MSG & msg, HandleRef hwnd, Int32 msgMin, Int32 msgMax, Int32 удалить)

в System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnshoushMM(Int32 dwComponentID, причина Int32, Intv pvLoopData)

в System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner (причина Int32, контекст ApplicationContext)

в System.Windows.Forms.Application.ThreadContext.RunMessageLoop (причина Int32, контекст ApplicationContext)

в System.Windows.Forms.Application.Run (форма mainForm)

в StarLIMS.Grabber.Manager.Program.Main (String [] args) в D: \ SDMS14SP2 \ StarLIMS.Grabber \ StarLIMS.Grabber.Manager \ Program.cs: строка 34

в System.AppDomain._nExecuteAssembly (сборка сборки, строка [] args)

в System.AppDomain.ExecuteAssembly (строковый сборочный файл, сборка доказательствSecurity, String [] args)

в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly ()

в System.Threading.ThreadHelper.ThreadStart_Context (состояние объекта)

в System.Threading.ExecutionContext.Run (функция обратного вызова ExecutionContext, состояние объекта) в System.Threading.ThreadHelper.ThreadStart ()

1 Ответ

0 голосов
/ 05 декабря 2010

Как указал Доггетт - мой ContextMenuStrip был инициализирован под OnLoad вместо ctor ... как только я переместил его в ctor - проблема исчезла.

...