导航
  • 主页
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm
  • WPF
  • 问答

异常捕获的问题

leon51 2020-07-08 05:33:17
如下图所示,Add方法有时会引发异常。
但想让程序继续运行下去、不至于中断。
我加了Try...Catch,但是捕获不了,请问应该如何处理?谢谢


float y = 10;
float x = 160;
PdfDocument document = new PdfDocument();
document.LoadFromFile(filePath);
PdfFont font = new PdfFont(PdfFontFamily.TimesRoman, 30f, PdfFontStyle.Italic | PdfFontStyle.Bold);
PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Center);
PdfPageLayer layer;
try
{
for (int i = 0; i < document.Pages.Count; i++)
{
document.Pages[i].PageLayers.DeleteOldLayer("WaterMark");

try
{
layer = document.Pages[i].PageLayers.Add("WaterMark", true);
}
catch (NullReferenceException )
{
throw;
}
layer.Graphics.SetTransparency(0.3f);
layer.Graphics.DrawString(mark, font, PdfBrushes.Red, x, y, format);
}

}
catch (Exception ex)
{

}
...全文
4235 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
引用 4 楼 leon51的回复:
[quote=引用 3 楼 迷途知返的海洋 的回复:]要做空引用判断
layer == null 还是 document.Pages[i].PageLayers == null? 我都试过是不可以的 layer和document.Pages[i].PageLayers都不为null [/quote] 应该是ducument或者page为空了
回复
正怒月神 2020-07-09
继续 f10
回复
wanghui0380 2020-07-09
 try
            {
                throw new NullReferenceException();
            }
            catch (NullReferenceException e)
            {
                Console.WriteLine(e);
                throw;
            }
我们想说的是,调试是调试,vs断在那里是给你提示,你继续运行就会捕获。结论:不是没有捕获,只是IDE调试中断在那里
回复
leon51 2020-07-09
引用 3 楼 迷途知返的海洋 的回复:
要做空引用判断
layer == null 还是 document.Pages[i].PageLayers == null? 我都试过是不可以的 layer和document.Pages[i].PageLayers都不为null
回复
要做空引用判断
回复
圣殿骑士18 2020-07-09
引用 4 楼 leon51 的回复:
[quote=引用 3 楼 迷途知返的海洋 的回复:]要做空引用判断
layer == null 还是 document.Pages[i].PageLayers == null? 我都试过是不可以的 layer和document.Pages[i].PageLayers都不为null [/quote] 你要学会在vs中怎么调试。你通过调试工具,观察a.b.c.d中,到底是a还是b还是c还是d是null值,就知道该判断谁为null了。 怎么观察?加断点调试,鼠标放到变量上,会有提示。
回复
ziqi0716 2020-07-09
通常与到此问题应该根据vs提示进行异常处理,千万不要习惯性使用try catch进行异常隐藏,一个项目中如果这样做多了,后期出问题会无法检查,建议仅在程序最外层进行异常捕获,项目中间应对各种出现的异常进行合理处理. 其实即使捕获到了异常,程序没有崩溃,但是程序的运行结果已经不是预想的了,所以还是得对异常进行正确处理才好.
回复
ziqi0716 2020-07-09
这个是vs为了调试所以给暂停的,如果你继续执行则会进入catch块中去.
回复
leon51 2020-07-08
刚才发现此处有一个复选框“引发此异常类型时中断”,去掉这个勾就不会中断程序了。
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.