【发布时间】:2011-04-02 10:09:03
【问题描述】:
我正在使用这样的 GUI 库(伪代码):
static void ProcessFrame()
{
// ...
if(fooWentWrong) throw new FooException();
if(barWentWrong) throw new BarException();
// ...
}
static void Main()
{
GUILib.OnEveryFrame += delegate { ProcessFrame(); };
try
{
GUILib.MainLoop();
}
catch(FooException e) // we don't handle BarException
{
// handle exception.
}
}
换句话说,GUILib 正在使用控制反转 - 它的主循环调用我的委托。
问题在于 GUILib 是一个遗留库,它捕获 OnEveryFrame 处理程序抛出的任何异常并将其打印到控制台,因此对于 FooExceptions 无法访问我的 FooException 处理程序,对于 BarExceptions,Visual Studio 调试器不会中断。
我已通过转到 Debug -> Exceptions 并检查 break on throw(而不仅仅是“break onhandled”)框来为 BarExceptions 中断调试器“公共语言运行时异常”。这可行,但这意味着 VS 现在会在 any 抛出异常时中断,即使处理程序会捕获它。所以我不能对非致命的东西使用异常。
有什么更好的方法让 VS 打破我的异常?我需要以某种方式解决图书馆的不良行为。
顺便说一句,库是 qt4dotnet / Qt Jambi。
【问题讨论】:
-
不能对非致命的东西使用异常可能不是一件坏事......我通常一直这样编码。
标签: c# visual-studio-2008 exception