c# - 输出窗口中的 Visual Studio 消息源
问题描述
假设我的输出窗口中有一条消息(显示来自Debug的输出)
抛出异常:mscorlib.dll 中的“System.InvalidOperationException”
我的应用程序不会抛出异常,只是显示该消息并继续。当我调用导入的 DLL 中的方法时发生异常,该 DLL 是 C++ 模块(我的应用程序是 C#)。尽管出现此消息,该方法似乎仍然可以正常工作。
我的猜测是该模块正在处理异常然后显示该消息,但我想确定是这种情况,并且与我如何导入它或编组数据(或那个自定义编组器)无关。
(我的代码:
[DllImport("theExternalModule.dll", EntryPoint = "ReadData", SetLastError = true)]
[return: MarshalAs(UnmanagedType.U4)]
private static extern UInt32 ReadData([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(JaggedArrayMarshaler))] Int16[][] data,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(JaggedArrayMarshaler))] Int16[][] dataOrig,
[MarshalAs(UnmanagedType.U2)] Int16 buffsize,
ref int smpNum);
和
resultCode = ReadData(_buffer, _origBuffer, bufferSize, ref sampleNumber);
(当我在调试器中单步执行此行时,会显示该消息)
我的问题是,有没有办法让输出窗口告诉我是什么模块或方法导致显示该消息?
解决方案
当您在创建枚举器后更改集合时,通常会发生此问题。您的原始问题没有足够的代码来断言,但您可以在此处和此处阅读有关此问题的信息。
这是一个会引发该异常的示例(取自其中一篇文章):
List<Book> books = new List<Book>();
books.Add(new Book("The Stand", "Stephen King"));
books.Add(new Book("Moby Dick", "Herman Melville"));
books.Add(new Book("Fahrenheit 451", "Ray Bradbury"));
books.Add(new Book("A Game of Thrones", "George R.R. Martin"));
books.Add(new Book("The Name of the Wind", "Patrick Rothfuss"));
Book newBook = new Book("Robinson Crusoe", "Daniel Defoe");
foreach (var book in books)
{
if (!books.Contains(newBook))
{
books.Add(newBook); // Throws a InvalidOperationException in mscorlib.dll
}
}
您可能还希望查看MSDN 上的 InvalidOperation 类以了解更多原因。
推荐阅读
- cloudflare - Cloudflare:流量 -> 健康检查 - 403 响应代码不匹配错误
- r - 使用ggplotly时geom_tile瓷砖移位
- flutter - 使用 WiX 进行颤振验证
- cmd - windows cmd - 在快捷方式中执行命令
- scala - Scala 中 ZonedDateTime 的排序
- go - /vendor/github.com/weaveworks/promrus 的 golang build 给出错误:未定义:logrus.Level
- typescript - this 在成员函数中未定义
- mysql - error of 1824: failed to open the referenced table
- oracle - 无法从其他用户登录到 Oracle 数据库
- python - 将列表和元组列表转换为字典