gpt4 book ai didi

c# - DateTime 相等和声明导致 ContextSwitchDeadlock

转载 作者:太空宇宙 更新时间:2023-11-03 22:04:08 25 4
gpt4 key购买 nike

我认为这是一个愚蠢的问题,但当我发现我无法执行以下操作时,我感到有点奇怪:

EditingItem.FROM = EditingItem.TO = DateTime.Now;   // FROM, TO are DateTime   

在这些操作之后,程序有时挂起,但有时它会按我认为的那样工作。
这是异常(exception):

ContextSwitchDeadlock was detected Message: The CLR has been unable to transition from COM context 0x478b80 to COM context 0x478dd0 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations.

将代码更改为:

  EditingItem.FROM = DateTime.Now;
EditingItem.TO = DateTime.Now;

对我的情况有帮助。

无法正确谷歌问题,查看解释,所以你能帮忙解释一下为什么 whis 表达式是错误的吗?
PS更多讨论在评论中。以下是一些实验结果:

DateTime d = DateTime.Now;
EditingItem.FROM = EditingItem.TO = d;//hang

添加了计时循环:

for (int i = 0; i < 100000; i++)
{
i++;
}

DateTime d = DateTime.Now;
EditingItem.FROM = EditingItem.TO = d;//hang

最佳答案

你的问题是似乎发生了一个lock - 同样没有提供代码,所以只是猜测 - 对象被锁定,因此从另一个属性分配一个属性将在自身上发生死锁。

如果您正在处理 COM,COM 对象是单线程单元对象这一事实可能会放大这一点。

关于c# - DateTime 相等和声明导致 ContextSwitchDeadlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9034876/

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