异常捕获的问题

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)
{

}
...全文
4300 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
刚才发现此处有一个复选框“引发此异常类型时中断”,去掉这个勾就不会中断程序了。

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧