Я использую библиотеку 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 использует инверсию управления - его mainloop вызывает мой делегат.
Проблемазаключается в том, что GUILib является устаревшей библиотекой, которая перехватывает любое исключение, выдаваемое обработчиками OnEveryFrame, и просто печатает его на консоли, поэтому мой обработчик FooException недоступен для FooExceptions, а для BarExceptions отладчик Visual Studio не прерывается.
Я сделал перерыв в отладчике для исключений BarException, перейдя в Отладка -> Исключения и установив флажок break в брошенном (а не просто "break on onhandled") поле для "Common Language Runtime"исключения».Это работает, но это означает, что VS теперь прерывается, когда выдается любое исключение, даже когда обработчик его поймал.Так что я не могу использовать исключения для несмертельных вещей.
Есть ли лучший способ заставить VS разбить мои исключения?Мне нужно как-то обойти нарушенное поведение библиотеки.
Кстати, библиотека qt4dotnet / Qt Jambi.