C#程序如何捕捉未try/catch的异常——不弹“XXX已停止工作”报错框

诚意满满直接上代码:

static void Main(string[] args)
{
    //Main函数中增加此句
    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}

并在Program类(Main函数所在类)中,增加如下函数即可:

        private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            Console.WriteLine(e.ExceptionObject.ToString());
            Environment.Exit(-1); //有此句则不弹异常对话框
        }

注意:如果在CurrentDomain_UnhandledException中只打印异常而不终止程序的话,该异常仍然会被抛出,最终还是会导致弹出“XXX已停止工作”的对话框,所以如果不想弹框让程序卡住的话就需要用第二句Environment.Exit或其他方式终止程序。当然此处除了向命令行输出异常外还可以保存当前数据或者其他灾难处理措施,但因为程序已经发生异常了,可能有些数据已经损坏,读取可能导致其他问题,要小心哦!

另外winform程序的话,对Application对象也要做一些设置,具体可以参考微软文档中的例子:https://msdn.microsoft.com/zh-cn/library/ms157905(v=vs.110).aspx

转载于:https://www.cnblogs.com/roadbike/p/5808613.html

从Spring Boot服务器A向Unity服务器B调用C#代码片段(如`Debug.Log("调用成功");`)通常是通过RPC(Remote Procedure Call)技术实现,因为HTTP本身并不支持直接跨域调用非同源的服务。一种常见的做法是使用WebSocket或者gRPC进行双向通信。以下是使用gRPC作为例子: **步骤1:设置gRPC服务** 1. 在Unity服务器B(C#项目)上,创建一个gRPC服务接口定义,例如`MyService.proto`: ```protobuf syntax = "proto3"; service MyService { rpc LogMessage(String) returns (void); } ``` 2. 实现服务端逻辑在`MyServiceImpl.cs`中: ```csharp [RpcMethod] public void LogMessage(string message) { Debug.Log(message); } ``` 3. 编译生成.NET类库(.dll文件)供Spring Boot使用。 **步骤2:在Spring Boot服务器A** 1. 配置gRPC客户端以连接Unity服务器B: - 引入gRPC客户端依赖(如Grpc.Net.Client NuGet包)。 - 创建gRPC客户端实例,指定目标地址。 2. 使用HttpClient或者其他方式触发调用: ```csharp using Grpc.Core; using MyProject; // 替换为生成的实际命名空间 var channel = GrpcChannel.ForAddress("http://unity-server-b.address"); var client = MyService.MyServiceClient.Create(channel); // 发起调用 try { client.LogMessageAsync("This is a call from Spring Boot").Wait(); } catch (RpcException ex) { // 处理错误 } channel.ShutdownAsync().Wait(); // 关闭通道 ``` **注意事项**: - 跨域问题:确保Spring Boot服务器A允许向Unity服务器B发起跨域请求,这可能涉及到浏览器同源策略或服务器设置。 - 保持心跳和连接管理:对于长连接,你可能需要添加心跳检查机制以维护持久连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值