我正在集成遗留系统,必须通过调用DLL来访问它的API。目前,没有其他方法可以调用API。
问题是DLL显示尝试显示引发文件未找到错误的启动画面。
我能够在示例解决方案中复制此行为,即使它更有猜测,因为我DotPeek无法反编译API的DLL。
解。
错误讯息。
申请代码。
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的错误?如果我可以阻止显示错误消息框就足够了。
答案 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);