System.InvalidOperationException:DragDrop注册没有
成功。 ---> System.Threading.ThreadStateException:
这个异常是什么意思?我在这一行得到它试图在运行时将面板添加到面板......
splitReport.Panel1.Controls.Add(ChartPanel);
在 VS2008 C# 中工作
此异常意味着拥有该面板(正在添加的面板)的线程已使用 MTA 线程模型进行了初始化。拖放系统要求调用线程使用 STA 线程模型(特别是要求通过 OleInitialize 初始化 COM)。线程模型是 COM(.NET 平台的前身)的一个不幸的遗迹。
如果您有[STAThread]
如果您的 Main 函数上有属性,那么主程序线程应该已经是 STA。那么,最可能的解释是该异常发生在不同的线程上。发生异常时,请查看 Visual Studio 中的“线程”窗口(“调试”|“Windows”|“线程”),看看您是否处于主线程以外的线程上。如果是的话,解决方案可能就像为该新线程设置线程模型一样简单,您可以按如下方式执行此操作(将此代码添加到正在创建控件的线程中):
Thread.CurrentThread.SetApartmentState( ApartmentState.STA )
(Thread
and ApartmentState
是以下组织的成员System.Threading
)
该代码需要在实际启动新线程之前发生。正如@Tomer 所指出的,您还可以使用声明式地指定这一点[STAThread]
属性。
如果您发现异常发生在主线程上,请回发并告诉我们,也许我们可以提供更多帮助。异常发生时的堆栈跟踪可能有助于追踪问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)