我有一个第三方库,有时会导致AccessViolationException异常。 我已经标记了罪魁祸首。 我真的希望这个方法能够优雅地失败,以便我的调用代码可以在短时间内再次尝试,但目前,这个异常会导致整个应用程序崩溃。
public static PlayerModel GetModel(int instanceId)
{
try
{
// New player model.
PlayerModel model = new PlayerModel();
// Fill.
model._flakyLibrary = new FlakyLibrary(instanceId); // **Sometimes crashes**
model.instanceId = instanceId;
// Return the new player model.
return model;
}
catch
{
// Try again in a bit - the game is not fully loaded.
return null;
}
}
我的一个想法是启动一个子进程来运行这个逻辑,如果需要的话,优雅地崩溃 - 我不知道如何做到这一点,更不用说让一个进程将这种对象(我的自定义PlayerModel)返回给另一个进程了。我已经尽力在谷歌和Stack Overflow上搜索(也许是我问错了问题?)。
解决方案
非常感谢Theodoros。我已经为上述方法添加了以下属性。现在异常被捕获了。
[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptions]
[System.Security.SecurityCritical]
P.S- 如果有人知道我应该研究什么,我仍然很想了解关于多进程解决方案的内容。再次感谢。
另一个编辑: 我找到了使用多个进程的解决方案:NamedPipeServerStream。