这行代码会导致以下异常:
object arg = methodCallMessage.Args[i];
private static List<ParameterInformation> GetParameterInfoList( IMethodCallMessage methodCallMessage )
{
List<ParameterInformation> parameterInformationList = new List<ParameterInformation>();
// Note: This works even if a parameter's value is null.
for( int i = 0 ; i < methodCallMessage.ArgCount ; i++ )
{
string argName = methodCallMessage.GetArgName(i);
object arg = methodCallMessage.Args[i];
var parameterInformation = new ParameterInformation(argName, arg);
parameterInformationList.Add(parameterInformation);
}
return parameterInformationList;
}
例外: FatalExecutionEngineError:运行时遇到致命错误。错误的地址位于0x71b97e8d,位于线程0x2ef4上。错误代码是0xc0000005。此错误可能是CLR中的错误,也可能是用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括COM-interop或PInvoke的用户编组错误,这可能会损坏堆栈。
或者有时这个例外:
AccessViolationException:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
这发生在多台机器上。
在调用堆栈中,当我显示外部代码时,它位于顶部: mscorlib.dll!System.Runtime.Remoting.Messaging.Message.Args.get()+ 0x5 bytes。
为什么会发生这种情况,或者如何解决这个问题?
注意:调用此方法的代码周围有一个锁,因此它不应该是线程/计时问题。
答案 0 :(得分:0)
这更像是一种解决方法,而不是实际修复,但它适用于这种情况。只有在以异步方式完成时才会出现此问题。启动该过程的代码包含了它:
Task.Factory.StartNew(() =>
当我删除它并且只是同步处理时,问题就消失了。