这行代码导致如下所示的异常:
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: attempt to read or write protected memory。这通常表明其他内存已损坏。
这在多台机器上发生。
在调用堆栈中,当我显示外部代码时,这是在顶部:mscorlib.dll!System.Runtime.Remoting.Messaging.Message.Args.get() + 0x5字节
知道为什么会发生这种情况,或者如何修复它吗?
注意:调用这个方法的代码周围有一个锁,所以它不应该是线程/定时问题。这更像是一种变通而不是实际的修复,但它适用于这种情况。该问题仅在以异步方式完成时发生。启动该进程的代码包含以下内容:
Task.Factory.StartNew(() =>
当我删除它,并且只是同步处理时,问题就解决了。