2

这不是常规的“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()

4

1 回答 1

0

正如 Doggett 指出的那样——我ContextMenuStrip的在 OnLoad 下被初始化,而不是在 ctor 下……一旦我将它移到 ctor 中——问题就消失了。

于 2010-12-05T11:12:46.250 回答