c# - UWP 应用程序中的 AccessViolationException
问题描述
我有使用 c++ 代码的 UWP 应用程序。
unsafe private void ProcessFrameOutput()
{
AudioFrame frame = _frameOutputNode?.GetFrame();
if (frame != null)
{
using (AudioBuffer buffer = frame.LockBuffer(AudioBufferAccessMode.Write))
{
using (IMemoryBufferReference reference = buffer.CreateReference())
{
byte* dataInBytes;
uint capacityInBytes;
float* dataInFloat;
// Get the buffer from the AudioFrame
((IMemoryBufferByteAccess)reference).GetBuffer(out dataInBytes, out capacityInBytes);
dataInFloat = (float*)dataInBytes;
var valuesList = new float[_audioGraph.SamplesPerQuantum];
for (int j = 0; j < _audioGraph.SamplesPerQuantum; j++)
{
try
{
float d = dataInFloat[j];
if (d <= 1 && d >= -1)
{
valuesList[j] = dataInFloat[j];
}
}
catch (AccessViolationException e)
{
}
}
ProcessSamples(valuesList);
reference.Dispose();
}
buffer.Dispose();
}
}
}
有时会float d = dataInFloat[j];
抛出 AccessViolationException。我无法在 try 块中捕捉到这一点,因为 UWP 基于 .net 核心。我正在搜索答案并找到这个:
<configuration>
<runtime>
<legacyCorruptedStateExceptionsPolicy enabled="true" />
</runtime>
</configuration>
我也不能添加这个,因为这是 UWP。
解决方案
推荐阅读
- perl - Config::Simple,如何更改默认输出标题?
- mysql - 与 Postgresql 相比,InnoDB 聚合查询慢
- c# - 使用反射在 C# 中处理 COM 事件
- spring-boot - WebSocketDeploymentInfo,将使用默认worker
- powershell - 使用 powershell 打开或关闭所有邮件流规则
- javascript - 数据驱动框架
- excel - 如何使用变量在 VBA 中复制整个列的内容?
- image-processing - 在 JAVA 中使用 Twelvemonkeys 压缩后质量下降,并且移除了荧光笔
- npm - 无法登录到 npm 'npm errno: -4048'
- html - 为什么在某些情况下 td 大小不同