gpt4 book ai didi

c# - 关于 C# 中线程的奇怪消息

转载 作者:太空狗 更新时间:2023-10-29 23:35:27 25 4
gpt4 key购买 nike

我有一个运行的程序,在运行过程中我收到这条消息:

托管调试助手“ContextSwitchDeadlock”在“C:\Documents and Settings\Lena G\My Documents\SchoolStuff\IR Information\Home Work\FianlProject\finalProject\finalProject\bin\Debug\finalProject.vshost”中检测到一个问题。可执行程序'。附加信息:CLR 在 60 秒内无法从 COM 上下文 0x3407968 转换到 COM 上下文 0x3407ad8。拥有目标上下文/单元的线程很可能正在执行非泵等待或处理一个非常长时间运行的操作而不发送 Windows 消息。这种情况通常会对性能产生负面影响,甚至可能导致应用程序变得无响应或内存使用量随着时间的推移不断累积。为避免此问题,所有单线程单元 (STA) 线程都应使用泵送等待原语(例如 CoWaitForMultipleHandles)并在长时间运行的操作期间定期泵送消息。

我理解是跟连续运行60秒不间断之类的有关系?怎么会有问题?我还将 [STAThread] 放在我程序的主体之前,因为如果我删除它,它会显示以下消息:

System.Windows.Forms.dll 中出现类型为“System.Threading.ThreadStateException”的未处理异常附加信息:在进行 OLE 调用之前,必须将当前线程设置为单线程单元 (STA) 模式。确保您的 Main 函数上标记有 STAThreadAttribute。仅当调试器附加到进程时才会引发此异常。

有人知道怎么解决这个问题吗?

提前致谢

莉娜

最佳答案

您需要确保拥有 COM 组件的线程不会因处理 >60 秒而被“锁定”。

可能发生的情况是您在表单中有一个 COM 对象,并且您正在 UI 线程上工作。如果您的 UI 被处理阻塞超过 60 秒,COM 组件会提示。

考虑使用 BackgroundWorker实例来处理您的长时间运行的过程。这会将工作推送到后台线程,并允许 COM 组件处理消息而不会产生提示。

关于c# - 关于 C# 中线程的奇怪消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2223988/

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