我有一个程序,我运行,在中间我得到这个消息:
托管调试助手'ContextSwitchDeadlock'在'C:\ Documents and Settings\Lena G\My Documents\SchoolStuff\IR Information\Home Work\FianlProject\finalProject\finalProject\bin\Debug\finalProject.vshost.exe'中检测到问题.附加信息:CLR无法从COM上下文0x3407968转换到COM上下文0x3407ad8 60秒.拥有目标上下文/公寓的线程很可能是在非抽空等待或处理非常长时间运行的操作而不抽取Windows消息.这种情况通常会对性能产生负面影响,甚至可能导致应用程序变得无响应或内存使用量随时间不断累积.为了避免这个问题,所有单线程单元(STA)线程都应该使用抽取等待原语(例如CoWaitForMultipleHandles)并在长时间运行操作期间定期泵送消息.
我知道它与它运行60秒而不停止或类似的事实有关?这怎么回事?我也把[STAThread]放在我程序的主要部分之前,因为如果我删除它,它会显示我的消息:
System.Windows.Forms.dll中发生类型为"System.Threading.ThreadStateException"的未处理异常附加信息:在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式.确保您的Main函数标记了STAThreadAttribute.仅当调试器附加到进程时才会引发此异常.
谁知道我怎么能解决这个问题?
提前致谢,
莉娜
这是当您从后台线程调用 ActiveX 对象并且主线程被阻止时生成的警告。也许更有可能的是:Visual Studio 2005 零售版中存在一个错误,无缘无故地触发了此警告。它已在 Service Pack 1 中修复,请确保您已安装它。另一种解决方法是关闭它。调试+异常,托管调试助手,取消选中ContextSwitchDeadlock警告。但如果您没有 SP1,请使用它。