处理WPF中外部DLL的嵌入式浏览器404错误

时间:2017-03-24 10:38:59

标签: c# wpf webbrowser-control

我正在集成遗留系统,必须通过调用DLL来访问它的API。目前,没有其他方法可以调用API。

问题是DLL显示尝试显示引发文件未找到错误的启动画面。

我能够在示例解决方案中复制此行为,即使它更有猜测,因为我DotPeek无法反编译API的DLL。

解。

enter image description here

错误讯息。

enter image description here

申请代码。

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        var dll = Assembly.LoadFile(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WpfLibrary.dll"));
        var type = dll.GetType("WpfLibrary.TestWindow");
        var instance = Activator.CreateInstance(type);
        object[] parameters = { };
        instance.GetType().InvokeMember("Start2", BindingFlags.InvokeMethod, null, instance, parameters);
    }
}

DLL代码。

public partial class TestWindow : Window
{
    public TestWindow()
    {
        InitializeComponent();
    }

    public void Start2()
    {
        Show();
        WebBrowser.Navigate(new Uri("file:///C:/aaaa.txt"));
    }
}

一个简单的解决方法是创建丢失的文件,但是我无法在每台安装WPF应用程序的机器上创建文件,需要更好的解决方案。

我的问题是如何处理/捕获来自外部DLL的错误?如果我可以阻止显示错误消息框就足够了。

1 个答案:

答案 0 :(得分:0)

最简单的方法是将代码放在try catch子句中。

try
{
    var dll = Assembly.LoadFile(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WpfLibrary.dll"));
    var type = dll.GetType("WpfLibrary.TestWindow");
    var instance = Activator.CreateInstance(type);
    object[] parameters = { };
    instance.GetType().InvokeMember("Start2", BindingFlags.InvokeMethod, null, instance, parameters);
}
catch(Exception exception)
{
    //handle exception
}

/编辑 你可以尝试这个codesnippet

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomainUnhandledException);