gpt4 book ai didi

c# - 在 WPF 中处理来自 c++ dll 的未处理异常

转载 作者:行者123 更新时间:2023-11-28 05:23:25 25 4
gpt4 key购买 nike

我的 WPF 应用程序使用外部 DLL 的方法(C++,没有 UI,只有逻辑),如下所示:

[DllImport("myExternDll.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
private static extern int externalMethod(string str);

int SomeWPFMethod()
{
int res;

try
{
res = externalMethod(str);
}
catch(Exception e)
{
LogError(e)
return -1;
}

return res;
}

请注意,SomeWPFMethod 是与 UI 线程分开调用的(如果这很重要的话)。

当我得到的dll里面有问题的时候

An unhandled exception of type 'System.AccessViolationException' occurred

异常。

A 为应用程序设置了未处理的异常方法,但这什么都不做:

Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;

private void Current_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
if (System.Diagnostics.Debugger.IsAttached)
{
e.Handled = false;
return;
}

ShowUnhandledException(e);
}

是否有可能以某种方式处理异常以防止应用程序崩溃?

如果 extern 方法失败,我不想做任何事情,但应用程序应该仍然可以工作。现在它崩溃了。

最佳答案

由于 SomeWPFMethod 是在与 UI 线程分离的线程中调用的,

Application.Current.DispatcherUnhandledException

将无法捕获此异常,因为它仅从 WPF 创建的主 UI 线程捕获未处理的异常。

看来你需要使用

AppDomain.CurrentDomain.UnhandledException

它捕获在特定应用程序域的上下文中运行的所有线程生成的未处理异常。

您可以引用以下文章,这些文章深入介绍了在 WPF 中处理未处理异常的正确方法 -

https://dzone.com/articles/order-chaos-handling-unhandled

https://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

希望这能解决您的问题。

关于c# - 在 WPF 中处理来自 c++ dll 的未处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41021478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com