悬赏分:20 浏览:273 次
问题是这样的
我在我的一个通讯程序中,封装了一个UDP组件(其实无论任何组件都无所谓,关键是一个通讯底层),这个组件会监听某个指定的端口,监听到之后以 同步 形式将当前监听的数据向上层抛(事件绑定),上层处理事件时可能会抛出某个异常(业务上的)
由于是同步形式,上层抛出的异常直接就跳回到这个UDP组件里了
我的想法是上层的业务异常最好不要回到这个UDP组件里去处理
当前我有几个考虑:
我看了一下m$在SerialPort类中抛出DataReceived事件的一段代码:
private void CatchReceivedEvents(object src, SerialDataReceivedEventArgs e)
{
SerialDataReceivedEventHandler dataReceived = this.DataReceived;
SerialStream internalSerialStream = this.internalSerialStream;
if ((dataReceived != null) && (internalSerialStream != null))
{
lock (internalSerialStream)
{
bool flag = false;
try
{
flag = internalSerialStream.IsOpen && ((SerialData.Eof == e.EventType) || (this.BytesToRead >= this.receivedBytesThreshold));
}
catch
{//这里没有任何处理
}
finally
{
if (flag)
{
 
|
我觉得M$的方式就可以了,毕竟是事件传递,需要保证事件全部传出去,而且如果顶层的异常需要处理应该会有相应的捕获。如果实在想要捕获到这个异常的话,可以使用类似Application.Error事件这样的方式。 |
|
3个月前 micYng : 倒是可以挂接一个全局的未捕获异常事件,但是那玩意只能捕获主线程里的异常,没多大用处 我现在的做法是在业务层可能抛异常的地方”就地正法“ :)try catch之后顺手将这个异常以友好形式抛到UI 欢迎继续讨论 :) |
|
3个月前 micYng : 总觉得事件这个东西,耦合性还是满大滴 |