System.InvalidOperationException:DragDrop注册未成功.---> System.Threading.ThreadStateException:
这个例外是什么意思?我在这一行试图在运行时向面板添加一个面板...
splitReport.Panel1.Controls.Add(ChartPanel);
Run Code Online (Sandbox Code Playgroud)
在VS2008中工作C#
Cha*_*lie 35
此异常意味着已使用MTA线程模型初始化拥有Panel(正在添加的Panel)的线程.拖放系统要求调用线程使用STA线程模型(特别是它需要通过OleInitialize初始化COM).线程模型是COM的一个不幸的遗迹,它是.NET平台的前身.
如果您[STAThread]的Main函数具有该属性,则主程序线程应该已经是STA.那么,最可能的解释是这个异常发生在另一个线程上.发生异常时,查看Visual Studio(调试| Windows |线程)中的"线程"窗口,看看您是否在主线程以外的线程上.如果是,解决方案可能就像为新线程设置线程模型一样简单,您可以执行以下操作(将此代码添加到创建控件的线程中):
Thread.CurrentThread.SetApartmentState( ApartmentState.STA )
(Thread并且ApartmentState是其成员System.Threading)
在实际启动新线程之前,需要执行该代码.正如@Tomer所述,您也可以使用该[STAThread]属性以声明方式指定.
如果您发现主线程上发生异常,请回发并告知我们,也许我们可以提供更多帮助.异常时的堆栈跟踪可能有助于追踪问题.
function abc
{
Thread t = new Thread(new ThreadStart(xyz));
t.SetApartmentState(ApartmentState.STA);
t.Start( );
}
function xyz
{
the code of Windows form..or whatever which is causing the error
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23724 次 |
| 最近记录: |