这不是常规的“Corss-Thread opeartion”BS,所以请不要发布明显的解决方案。
这是让我疯狂好几天的事情。
我有一个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(消息和消息)
在 System.Windows.Forms.NotifyIcon.NotifyIconNativeWindow.WndProc(消息和 m)
在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)
在 System.Windows.Forms.UnsafeNativeMethods.PeekMessage(MSG 和 msg,HandleRef hwnd,Int32 msgMin,Int32 msgMax,Int32 删除)
在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID,Int32 原因,Int32 pvLoopData)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 原因,ApplicationContext 上下文)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 原因,ApplicationContext 上下文)
在 System.Windows.Forms.Application.Run(窗体 mainForm)
在 D:\SDMS14SP2\StarLIMS.Grabber\StarLIMS.Grabber.Manager\Program.cs:line 34 中的 StarLIMS.Grabber.Manager.Program.Main(String[] args)
在 System.AppDomain._nExecuteAssembly(程序集程序集,字符串 [] 参数)
在 System.AppDomain.ExecuteAssembly(字符串 assemblyFile,证据 assemblySecurity,String [] args)
在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在 System.Threading.ThreadHelper.ThreadStart_Context(对象状态)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 在 System.Threading.ThreadHelper.ThreadStart()