为什么调用SetConsoleCtrlHandler的时候会有异常?

ifan_net 2008-07-22 03:25:18
挺简单的一个程序
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Net;

namespace ConsoleColsed
{
public delegate bool ConsoleCtrlDelegate(int dwCtrlType);

public class ClsMain
{
[DllImport("kernel32.dll")]
private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add);

[STAThread]
static void Main()
{
ConsoleCtrlDelegate newDelegate = new ConsoleCtrlDelegate(HandlerRoutine);
bool bRet = SetConsoleCtrlHandler(newDelegate, true);

string server = Dns.GetHostName();//问题出在这一行,在控制台按Ctrl+C会蹦异常,注释掉这一行就没有问题

Console.Read();
}

private static bool HandlerRoutine(int CtrlType)
{
const int CTRL_CLOSE_EVENT = 2;
const int CTRL_C_EVENT = 0;
switch (CtrlType)
{
case CTRL_CLOSE_EVENT:
Console.WriteLine("Close");
break;
case CTRL_C_EVENT:
Console.WriteLine("Ctrl+C");
break;
}

return false;
}
}
}


大家请看string server = Dns.GetHostName();这一行,如果把这一行注释掉了就没有问题。
那么问题是,我现在要写一个基于控制台的socket程序,而且我希望接管控制台关于程序的动作(比如按了Ctrl+C我要做一些处理),可是好像用System.Net里面的东西就会起冲突,请问怎么解决?
...全文
125 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ifan_net 2008-07-22
  • 打赏
  • 举报
回复
上面那个问题是我自己用命令行编译出来的exe
如果在vs中编译则没有这个问题
请达人解惑
qyulang 2008-07-22
  • 打赏
  • 举报
回复
mark!sf

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧