使用C#,.NET 4.0更新4.0.3,Windows 7 64位:
由于我的责任之外的原因,我必须让GUI线程在后台处理消息时“休眠”。到目前为止,这完美无缺:
private void SleepWithEventLoop(int ms)
{
var timeout = DateTime.UtcNow.AddMilliseconds(ms);
while (DateTime.UtcNow < timeout && !disposed)
{
System.Windows.Forms.Application.DoEvents();
Thread.Sleep(1);
}
}
因为我今天早上启动了PC,没有明显的原因,我开始得到这样的例外(日志文件中的代码段):
2012-12-18 12:50:41.204 | - None - | Exception | Exception caught: Der hinzuzufügende Wert war außerhalb des Bereichs.
| | | Parametername: value
| | | Details:
| | | bei System.DateTime.Add(Double value, Int32 scale)
| | | bei System.DateTime.AddMilliseconds(Double value)
| | | bei com.<...>.CanOpenProxyServer.SleepWithEventLoop(Int32 ms) in C:\Users\<...>\CanOpenProxy.cs:Zeile 78.
| | | bei com.<...>.CanOpenProxyServer.HandleConnection(MessageChannel channel) in C:\Users\<...>\CanOpenProxy.cs:Zeile 55.
我对DateTime.Now有一些问题,因为DST之后就消失了 切换到DateTime.UtcNow,但上面的例外仍然存在。 IT部门没有 最近安装任何更新,我当然没有安装或删除任何程序或与注册表混乱。 DateTime如何突然“突破”?!?
我将上面的代码复制到一个新项目中,用
单独测试它while (true) SleepWithEventLoop(5);
它仍然崩溃了。重新安装.NET也不起作用。有什么想法吗?
编辑:两个同事的PC上的问题相同,但不是新安装的VmWare系统。开始看起来我们的公司PC配置有点有趣。 DateTime是否需要任何“特殊”配置?编辑2:所以我通过P-Invoking到一个小的C DLL“修复”了这个问题,它暴露了time.h函数,包含在DateTime类中。在所有项目中搜索/替换。我觉得这样做很脏,但它至少解决了症状。当时间表压力减少时,我会再次研究这个问题(是的,是的)。
答案 0 :(得分:0)
当我的代码在一台计算机上正常运行而在第二台计算机上运行不正确时,我预计问题是我的应用程序正在使用的DLL。所以我的建议是: