做一个小项目碰到的问题,先保存下来,再次碰到时,心里有个数。嘻嘻。
在测试手机地图时,遇到一个问题,就是内存泄露(OutOfMemoryException),异常代码0xc0000005,写入出错,这是由于没有及时释放地图窗体对象,而又多次连续操作地图打开、关闭,造成内存泄露,指针指向出现错误,内容写不入对应的地址中。窗体及时释放后就OK啦。
点击主界面中关闭系统选项时,报threadAbortexception异常。这是由于关闭系统时,进行线程的Abort()操作时,还有一个线程在运行,没有关闭,出现此异常,写了一个单独的方法,处理没有关闭的线程就OK啦。
以下是官方对THreadAbortException的解释:在对 Abort 方法进行调用时引发的异常。
在调用 Abort 方法以销毁线程时,公共语言运行时将引发 ThreadAbortException。 ThreadAbortException 是一种可捕获的特殊异常,但在 catch 块的结尾处它将自动被再次引发。 引发此异常时,运行时将在结束线程前执行所有 finally 块。 由于线程可以在 finally 块中执行未绑定计算,或调用 Thread.ResetAbort 来取消中止,所以不能保证线程将完全结束。 如果您希望一直等到被中止的线程结束,可以调用 Thread.Join 方法。 Join 是一个阻塞调用,它直到线程实际停止执行时才返回。
说明 |
---|
在托管可执行文件中的所有前台线程已经结束后,当公共语言运行时 (CLR) 停止后台线程时,它不使用 Thread.Abort。 因此,无法使用 ThreadAbortException 来检测 CLR 何时终止后台线程。 |