我们有面向.NET Framework 4.0中一个Windows窗体应用程序。 安装.Net框架4.5后,应用程序开始崩溃。 我们必须要调查的崩溃,我们将最有可能不得不解决就在我们身边的事情。 但是,有没有我们可以打开,以保持旧的行为,直到我们准备使用.NET 4.5的设置?
更新2012年7月12日:我们发现,使我们的应用程序崩溃的重大更改:给定一个System.Threading.Timer,与已经关闭的句柄调用Dispose(WaitHandle的)时,则计时器尝试信号的WaitHandle的它抛出一个异常。 在.NET 4.0实现定时器的是宽容到4.5,但不是。
没有站在我们这一边的错误; 我们没有任何充分的理由给它一个封闭的手柄,使我们就解决这个问题......直到我们找到另一个错误......
但是,有没有我们可以打开,以保持旧的行为,直到我们准备使用.NET 4.5的设置?
号.NET 4.5是就地更换的.NET 4.当你安装了它,你就有效的新框架运行。
一般情况下,它应该是完全向后兼容,但也有一些重大的变动 。
不幸的是,这将意味着你(和其他人)将需要测试并修复这两个框架的问题,如果你想支持安装4.5和没有安装4.5的机器上运行。 幸运的是,重大更改通常都非同一般,边缘情况,所以它不太可能在大多数情况下,以影响大多数用户。
我讨论过这个通过电子邮件与原来的问题的海报 - “狡猾”。 狡猾的感谢帮助调查。 事实证明,.NET4和.NET4.5行为的处置(WaitHandle的)API的方式相同。 所以,这个问题可能是无关的.NET4.5。
static void Main(string[] args)
{
System.Threading.Timer timer = new System.Threading.Timer(new System.Threading.TimerCallback(blah));
System.Threading.EventWaitHandle eventWaitHandle = new System.Threading.EventWaitHandle(true, System.Threading.EventResetMode.ManualReset);
eventWaitHandle.Dispose();
System.Threading.Thread.Sleep(2000);
timer.Dispose(eventWaitHandle);
}
private static void blah(object state)
{
Console.WriteLine(40);
}