如果我用这个......
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
...在我的C#.Net4.5 控制台应用程序中获取控制台实例并将其分配给变量(我在调用user32&#39时将其作为hWnd参数传递; s MessageBox()
方法),当我完成非托管变量时,是否需要调用kernel32' CloseHandle()
方法?
当我尝试这个时,我得到一个SEHException,我的谷歌搜索似乎表明它与调试模式和早期版本的.NET有关。
问题1 - 我应该使用CloseHandle,还是只留下它并让控制台资源自行解决?
问题2 - SEHException是否完全不相关,还是因为我在尝试关闭控制台时仍未实例化?
旁注
对#43; noob问题表示抱歉&#34 ;;我接下来没有使用非托管代码的经验。
我知道有更好的方法可以做到这一点;我故意在不导入Windows.Forms
的情况下尝试这样做答案 0 :(得分:3)
永远不要在窗口句柄上调用CloseHandle。关闭窗口的正确方法是调用DestroyWindow。应该调用CloseHandle来关闭内核对象的句柄,例如窗口句柄是一个GDI对象,所以它不会被CloseHandle关闭。
然而,DestroyWindow将关闭窗口,就像您单击关闭按钮一样。因此,要回答您的根问题,不需要在代码中关闭窗口句柄。除非你想关闭控制台窗口,否则就是这样。