C# 尝试捕获块损坏代码

C# 尝试捕获块损坏代码,c#,udp,try-catch,udpclient,C#,Udp,Try Catch,Udpclient,我写了一个简单的UDP框架,它工作得很好。在将代码包装到try/catch块中时,发送函数停止工作-没有编译器或运行时错误,当我删除try/catch语句时,发送函数再次开始工作 我的所有其他方法,包括receive方法,似乎都不受try/catch语句的影响。考虑下面的代码: public static AsyncCallback callback = new AsyncCallback(SendCallback); public static void Send(string data)

我写了一个简单的UDP框架,它工作得很好。在将代码包装到try/catch块中时,发送函数停止工作-没有编译器或运行时错误,当我删除try/catch语句时,发送函数再次开始工作

我的所有其他方法,包括receive方法,似乎都不受try/catch语句的影响。考虑下面的代码:

public static AsyncCallback callback = new AsyncCallback(SendCallback);

public static void Send(string data) {
    try {
        byte[] bytes = Encoding.ASCII.GetBytes(data);
        socket.BeginSend(bytes, bytes.Length, callback, socket);
    } catch (Exception e) {
        Console.WriteLine("Error: " + e.StackTrace);
        Console.WriteLine("Message: " + e.Message);
    }
}

public static void SendCallback(IAsyncResult ar) {
    try {
        socket.EndSend(ar);
    } catch (Exception e) {
        Console.WriteLine("Error: " + e.StackTrace);
        Console.WriteLine("Message: " + e.Message);
    }
} 

我很好奇为什么会发生这种情况。

Try catch本身不会导致异常,除非出现异常,否则catch块中的代码永远不会运行。知道了这一点后,很明显,在其他地方存在一个抛出异常的问题。快速提问,这是一个控制台应用程序吗?为什么要声明“new AsyncCallback(SendCallback)”,而不是直接使用SendCallback?无论如何,我认为在通信的“开始”和“结束”阶段只捕获异常,因为这是一个异步方法,它将在第二个线程中执行。也许您需要使用“wait”调用SendAsync或类似的方法,以便捕获异常。@一般情况下,服务器是一个控制台应用程序,但是客户端(发生此问题的地方)是统一的。@Francesco是的,我应该缓存回调-我已经编辑了问题。