首页 > 解决方案 > 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。

标签: c#c++.net-coreuwp

解决方案


推荐阅读