我们有一个针对.Net Framework 4.0的Windows窗体应用程序.安装.Net Framework 4.5后,应用程序开始崩溃.我们将不得不调查崩溃事件,我们很可能必须解决问题.但是,在我们准备好使用.Net 4.5之前,是否有一个设置可以保持旧的行为?
更新07/12/2012: 我们发现导致应用程序崩溃的重大更改:给定System.Threading.Timer,当使用已经关闭的句柄调用Dispose(WaitHandle)时,Timer会尝试发出WaitHandle信号这引发了一个例外.Timer的.Net 4.0实现是容忍的,但4.5不是.
我们这边有一个错误; 我们没有任何理由给它一个封闭的句柄,所以我们只是解决这个问题...直到我们发现另一个错误...
我通过电子邮件与原始问题海报 - "狡猾"进行了讨论.谢谢Sly帮助调查.事实证明.NET4和.NET4.5对于Dispose(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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17141 次 |
| 最近记录: |