关于委托的异步调用.
请教:
我用委托的异步调用,如:
DelegateSaveData ExeSaveData = new DelegateSaveData( SaveData );
ExeSaveData.BeginInvoke(sFileName, null, null);
为什么在函数SaveData出现异常错误(savedata函数中没有try语句),没有出现异常的提示呢?
还有,我写成
try
{
DelegateSaveData ExeSaveData = new DelegateSaveData( SaveData );
ExeSaveData.BeginInvoke(sFileName, null, null);
}
catch
{
...
}
在catch中也没有捕捉到异常?
很是郁闷,请教各位,谢谢。
问题点数:20、回复次数:4Top
1 楼tjvictor(终于升星了,向两星奋斗)回复于 2006-12-01 11:47:58 得分 0
這個問題可能要看到代碼後,才知道是哪的問題。Top
2 楼flyskywlh(成功时享受成就,失意时享受生活..)回复于 2006-12-01 12:28:00 得分 0
catch(Exception ex)
{
throw new Exception(ex.Message)
}
Top
3 楼liujia_0421(SnowLover)回复于 2006-12-01 12:53:42 得分 10
在savedata函数中加上捕获异常的语句...
可以不处理,但要在catch(Exception ex)下再抛出..
priavte void savedata(type1 t1,type2,t2)
{
try
{
//操作
}
catch(Exception ex)
{
//不作处理,但抛出异常
throw new Exception(ex.Message);
}
}Top
4 楼Little_Ghost(小鬼)回复于 2006-12-01 13:07:56 得分 10
原因:
BeginInvoke的时候CLR会启动另外一个线程(NewThread)
而你的程序的主线程(MainTread)在调用BeginInvoke以后立刻返回,
没有返回值,MainThread和NewThread两个线程相对独立。
当NewThread线程出现错误,在你主线程应该是捕捉不到了
解决:
如果你想捕捉到异常那么你就要等待NewThread完成
并通过IAsyncResult建立两个线程的关系
这样写
try
{
DelegateSaveData ExeSaveData = new DelegateSaveData( SaveData );
IAsyncResult result = ExeSaveData.BeginInvoke(sFileName, null, null);
ExeSaveData.EndInvoke(result);
}
catch
{
...
}
这样你可以捕捉到NewThread中的异常了
Top





