1. .Net 多线程编程中的异常处理:
如果子线程出现异常,而在该子线程中此异常没有被处理,则此异常会被向上抛出到此子线程的父线程。
比如 主线程为UI线程,它启动了一个线程A, 而线程A 有启动了一个线程B, 在线程B运行时,B抛出了一个未被处理的异常,则A线程首先捕获此异常,如果A未处理此异常则A也不会将此异常抛给主线程。也可以认为这种多线程的异常,只会向上一层父线程抛一个层次。
2. GDI+ 的问题:
如果你的 Image 是通过一个流(stream)创建的,那么,在你对这个Image 进行保存(写入到磁盘)操作时,要保证构建这个Image的Stream 还是存在的。所以,这个 Image 和 Stream 的生命期应该是相同的。否则.Net会抛出 A generic error occurred in GDI+. 异常。
分析:因为在 .Net 所有对象的访问,都是通过指针进行的,所以,如果 Stream 过早的被 销毁. 那么等稍后 Image 对象需要写入到 内存时,发现已经找到内存位置了。所以会抛出异常。
3. P/Invoke 问题:
在进行 P/Invoke 时,C++端的导出函数包含一个 默认参数,那么在 C#端一定要显示的传递这个参数,否则,等调用到了C++端时,
这个默认参数不会自动 被压入堆栈,而此时,就会取到栈上的一个随机值。会发生错误。
4. WinForm 窗体中控件 Size 改变的问题:
有时后,我们需要改变一个控件的Size, 代码中调用 new Size(widht, height) 或者调用了 SetBound(...)函数 设置了控件大小后
发现控件的大小并未变为我们指定的值,此时,请更改此控件的 AutoSize 属性为 false.