gpt4 book ai didi

c# - DragDrop 注册没有成功

转载 作者:可可西里 更新时间:2023-11-01 03:03:47 25 4
gpt4 key购买 nike

System.InvalidOperationException: DragDrop registration did not succeed. ---> System.Threading.ThreadStateException:

这个异常是什么意思?我在这一行尝试在运行时将面板添加到面板...

splitReport.Panel1.Controls.Add(ChartPanel);

在 VS2008 C# 中工作

最佳答案

此异常意味着拥有面板(正在添加的面板)的线程已使用 MTA 线程模型进行了初始化。拖放系统要求调用线程使用 STA 线程模型(特别是它要求 COM 通过 OleInitialize 初始化)。线程模型是 .NET 平台的前身 COM 的不幸遗迹。

如果您的 Main 函数具有 [STAThread] 属性,那么主程序线程应该已经是 STA。那么,最可能的解释是此异常发生在不同的线程上。异常发生时查看Visual Studio中的Threads窗口(Debug | Windows | Threads),看看你是不是在主线程以外的线程上。如果是,解决方案可能与为该新线程设置线程模型一样简单,您可以按如下方式执行(将此代码添加到正在创建控件的线程中):

Thread.CurrentThread.SetApartmentState(ApartmentState.STA)

(ThreadApartmentStateSystem.Threading 的成员)

该代码需要在您实际启动新线程之前发生。正如@Tomer 所指出的,您还可以使用 [STAThread] 属性以声明方式指定它。

如果您发现异常发生在主线程上,请回帖告诉我们,也许我们可以提供更多帮助。异常发生时的堆栈跟踪可能有助于追踪问题。

关于c# - DragDrop 注册没有成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/135803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com